题解「EZEC-9」进位
令"前"表示二进制数位值小的一边,"后"表示大的一边。
\textrm{Subtask~1}
可以
\textrm{Solution~1}
对于第一问,我们有结论,无论顺序如何,答案不会改变。
证明可以按位考虑,对于第
复杂度证明
比较经典,令
\textrm{Subtask~2,3}
考虑枚举得到最大值的加操作,假设位置为
在
\textrm{Solution~2.1}
基于对
这里提供了一个
\textrm{Solution~2.2}
在
一些常见的错误可以见这个帖子。
#include<cstdio>
char s[1000032];
int n,m,a[1000032],ans,len,x,ans1;
int main(){
scanf("%d%d%s",&n,&m,s);
for(int i=0;i<n;++i)s[i]-='0';n+=30;
while(m--){
scanf("%d",&x),++s[x],++ans1;
while(s[x]>=2)a[x]=1,++s[x+1],s[x]-=2,++x,++ans1;
}
for(int i=0;i<n;++i)
if(a[i]){++len;if(len>ans)ans=len;}
else len=0;
printf("%d\n%d",ans1,ans+1);
}