比赛的时候E调了好久...F没时间写T T

  A:直接走到短的路上来回走就好了

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
int n,a,b,c;
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);read(a);read(b);read(c);
if(n==)return puts(""),;
int mn=min(a,min(b,c));int now=;
if(a==mn||b==mn)printf("%d\n",mn*(n-));
else printf("%d\n",min(a,b)+mn*(n-));
}

  B:将所有数%m,找到最多的相同的数即可

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
int n,k,m,ans,ansi,cntt;
int x[maxn],y[maxn];
int v[maxn];
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);read(k);read(m);
for(int i=;i<=n;i++)read(x[i]),y[i]=x[i]%m;
for(int i=;i<=n;i++)
{
v[y[i]]++;
if(v[y[i]]>ans)
{
ans=v[y[i]];
ansi=y[i];
}
}
if(ans>=k)
{
puts("Yes");
for(int i=;i<=n;i++)
{
if(y[i]==ansi)printf("%d ",x[i]),cntt++;
if(cntt==k)return ;
}
}
else puts("No");
}

  C:答案只可能在[n-100,n]之间,枚举一下就好

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
int n,cnt;
int ans[maxn];
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);
for(int i=max(,n-);i<=n;i++)
{
int x=i,sum=i;
while(x)
{
sum+=x%;
x/=;
}
if(sum==n)ans[++cnt]=i;
}
printf("%d\n",cnt);
for(int i=;i<=cnt;i++)printf("%d ",ans[i]);
}

  D:最后连续的硬币删掉,前面还剩多少个硬币就是答案

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
int n,x;
bool b[maxn];
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
puts("");read(n);int N=n;
for(int i=;i<=n;i++)
{
// printf("%dQAQ\n",N);
read(x);b[x]=;
while(b[N])N--;
printf("%d ",i-(n-N)+);
}
}

  E:从每种数字可以改或者不改想到2-SAT,如果第i个字符串比第i+1个字符串小,v[i][j]和v[i+1][j]不一样,那么v[i+1][j]改,v[i][j]就必须改,v[i][j]不改,v[i+1][j]就不能改,如果第i个字符串比第i+1个字符串大,那么v[i][j]必须改,v[i+1][j]不能改,如上连边跑一个可行方案即可。

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
const int maxn=,inf=1e9;
struct poi{int too,pre,x;}e[maxn<<],e2[maxn<<];
int last[maxn],last2[maxn],dfn[maxn],low[maxn],col[maxn],lack[maxn],ru[maxn],rs[maxn],st[maxn],op[maxn];
int n,m,x,y,z,tot,tot2,tott,top,color,flag,len,cnt;
int ans[maxn];
vector<int>v[maxn];
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
void add(int x,int y){e[++tot].too=y;e[tot].x=x;e[tot].pre=last[x];last[x]=tot;}
void add2(int x,int y){e2[++tot2].too=y;e2[tot2].x=x;e2[tot2].pre=last2[x];last2[x]=tot2;}
int next(int x){return x&?x+:x-;}
void tarjan(int x)
{
dfn[x]=low[x]=++tott;st[++top]=x;lack[x]=top;
for(int i=last[x];i;i=e[i].pre)
if(!dfn[e[i].too])tarjan(e[i].too),low[x]=min(low[x],low[e[i].too]);
else if(!col[e[i].too])low[x]=min(low[x],dfn[e[i].too]);
if(dfn[x]==low[x])for(color++;top>=lack[x];top--)col[st[top]]=color;
}
void topsort()
{
top=;for(int i=;i<=color;i++)if(!ru[i])st[++top]=i;
while(top)
{
int now=st[top--];
if(!rs[now])rs[now]=,rs[op[now]]=;
for(int i=last2[now];i;i=e2[i].pre)
if(!(--ru[e2[i].too]))st[++top]=e2[i].too;
}
}
int main()
{
read(n);read(m);
for(int i=;i<=n;i++)
{
read(len);
for(int j=;j<=len;j++)
read(x),v[i].push_back(x);
}
for(int i=;i<n;i++)
{
int flagg=;
for(int j=;j<min(v[i].size(),v[i+].size());j++)
if(v[i][j]!=v[i+][j])
{
if(v[i][j]<v[i+][j])add(next(v[i+][j]<<),next((v[i][j])<<)),add(v[i][j]<<,v[i+][j]<<);
else add(v[i][j]<<,next((v[i][j])<<)),add(next((v[i+][j])<<),v[i+][j]<<);
flagg=;break;
}
if(!flagg&&v[i].size()>v[i+].size())return puts("No"),;
// else add(next(v[i][min(v[i].size(),v[i+1].size())]<<1),next((v[i+1][min(v[i].size(),v[i+1].size())])<<1));
}
for(int i=;i<=m<<;i++)if(!dfn[i])tarjan(i);
for(int i=;i<=m;i++)
{
if(col[i<<]==col[next(i<<)]){printf("No\n");flag=;break;}
else op[col[i<<]]=col[next(i<<)],op[col[next(i<<)]]=col[i<<];
}
if(flag)return ;
for(int i=;i<=tot;i++)if(col[e[i].x]!=col[e[i].too])add2(col[e[i].too],col[e[i].x]),ru[col[e[i].x]]++;
topsort();
// for(int i=1;i<=tot;i++)printf("QAQ%d %d\n",e[i].x,e[i].too);
//if(rs[col[(i<<1)]]==rs[col[next(i<<1)]])return puts("No"),0;
for(int i=;i<=m;i++)if(rs[col[(i<<)]]!=)ans[++cnt]=i;
printf("Yes\n%d\n",cnt);
for(int i=;i<=cnt;i++)printf("%d ",ans[i]);
return ;
}

  F:预处理出每个数每一位是0的那位左边最近的1和右边最近的1,用单调栈找出每个最大值所在的区间,统计答案即可。

  T T一开始只预处理了20位查了好久错,浅谈状压写多了的后果

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,inf=2e9;
int n,top;
int st[maxn],a[maxn],digit[maxn][],pre[maxn][],Pre[maxn],next[maxn][],Next[maxn],cnt[maxn];
ll ans;
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);
for(int i=;i<=n;i++)
{
read(a[i]);
for(int x=a[i];x;x>>=)digit[i][++cnt[i]]=x&;
}
for(int j=,last=;j<=;j++,last=)
for(int i=;i<=n;i++)
{
if(!digit[i][j])pre[i][j]=last;
if(digit[i][j])last=i;
}
for(int i=;i<=n;i++)
for(int j=;j<=;j++)
if(!digit[i][j])
Pre[i]=max(Pre[i],pre[i][j]);
memset(next,,sizeof(next));
for(int j=,last=n+;j<=;j++,last=n+)
for(int i=n;i;i--)
{
if(!digit[i][j])next[i][j]=last;
if(digit[i][j])last=i;
}
memset(Next,,sizeof(Next));
for(int i=;i<=n;i++)
for(int j=;j<=;j++)
if(!digit[i][j])
Next[i]=min(Next[i],next[i][j]);
a[++n]=inf;
for(int i=;i<=n;i++)
{
for(;top&&a[i]>=a[st[top]];top--)
{
ans+=1ll*((i-)-st[top]+)*(st[top]-(st[top-]+)+);
ans-=1ll*(1ll*st[top]-1ll*max(st[top-]+,Pre[st[top]]+)+)*(min(i-,Next[st[top]]-)-st[top]+);
}
st[++top]=i;
}
printf("%lld\n",ans);
}

Codeforces Round #441 Div. 2题解的更多相关文章

  1. Codeforces Round #441 (Div. 2)【A、B、C、D】

    Codeforces Round #441 (Div. 2) codeforces 876 A. Trip For Meal(水题) 题意:R.O.E三点互连,给出任意两点间距离,你在R点,每次只能去 ...

  2. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  3. Codeforces Round #441 (Div. 2)

    Codeforces Round #441 (Div. 2) A. Trip For Meal 题目描述:给出\(3\)个点,以及任意两个点之间的距离,求从\(1\)个点出发,再走\(n-1\)个点的 ...

  4. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  5. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  6. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  7. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  8. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  9. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

随机推荐

  1. 学习HTML 第二节.HTML头部

    HTML为什么要有个头部?还不太明白,可能是一些要提前声明的东西吧.先看看有什么内容吧. 可以添加在头部区域的元素标签为: <title>标题,这个我们知道了: <meta>使 ...

  2. selenium+python 搭建自动化环境

    一.以搭建windows平台为例 准备工具如下: 1)下载Python 2)安装,配置环境变量 3)安装selenium,通过pip安装,命令如下:  pip install selenium 方式二 ...

  3. [C++]boost dijkstra获得两点间的最短路

    需求是只需要得到两点间的最短路,不需要求得单源对于全图的最短路,使用boost中的dijsktra_shortest_path,当得到目标点的最短路时直接throw exception. #inclu ...

  4. eclipse Unable to read repository 花了三天时间,吐血解决

    安装eclipse 的 swt examples插件时出现这个错误 查了三天,发现就是网速太慢,导致下载一半下不动出错,原因大概是因为国外吧 于是想看看能不能通过离线安装插件包的方式 问题来了,插件包 ...

  5. IDE看代码,挺好

    初学编程的时候总是收到各种警告:“刚学习编程千万不要用IDE,否则会有xxxxxx的后果”.现在工作后发现使用IDE可以方便编写和查看代码,对于较大的项目来说有很多代码,代码之间的关系也比较复杂,ID ...

  6. Office 365 Powershell 连接命令

    国内版 第一步: Import-Module msonline Connect-MsolService 输入用户名密码 第二步: Get-MsolUser" 第三步: Set-Executi ...

  7. ExpressJS基础概念及简单Server架设

    NodeJS Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js 的包 ...

  8. 华为ensp使用

    网络学习目录 AR是() Auto:自动线 copper:双绞线缆  serial:串行线  pos: 光纤  E1:    ATM:    CTL:       STA:    PC:    MCS ...

  9. 曾经我是一个只会excel的数据分析师,直到我遇到了……

    我是一个数据分析师. 准确来说我是一个当年只会excel数据透视表,就天不怕地不怕地来当数据分析师的人.当年的某一天,我的老板Q我: 小刘啊,我小姨子给了我一个全国市委书记的名单,你帮我看看,有什么规 ...

  10. caffe环境搭建笔记

    首先安装以下库或软件 sudo apt-get install gitsudo apt-get install      libprotobuf-dev     libleveldb-dev    l ...