比赛 |
EYOI暨SBOI暑假快乐赛6th |
评测结果 |
AAAAAAAAAA |
题目名称 |
Count 1s |
最终得分 |
100 |
用户昵称 |
ムラサメ |
运行时间 |
0.305 s |
代码语言 |
C++ |
内存使用 |
4.66 MiB |
提交时间 |
2022-06-30 10:00:33 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,maxx=0,minn=0;
int a[300010],b1[300010],b2[300010];
bool cmp(int x,int y){
return x<y;
}
int main(){
freopen("count1s.in","r",stdin);
freopen("count1s.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
int temp;
for(int i=1;i<=n;i++){
cin>>temp;
if(temp==0){//0,1翻转后的贡献
a[i]=1;
}
else{
a[i]=-1;
}
}
for(int i=1;i<=n;i++){//前缀和
a[i]+=a[i-1];
}
for(int i=0;i<n;i++){
if(a[i]>maxx){//记录上下界
maxx++;
}
else{
if(a[i]<minn){
minn--;
}
}
b1[i+1]=a[i+1]-maxx;//寻找可行区间
b2[i+1]=a[i+1]-minn;
}
sort(b1+1,b1+n+1);
sort(b2+1,b2+n+1);
if(b1[1]>0||b2[n]<0){//答案左端点取并集
cout<<b2[n]-b1[1]+2<<endl;
}
else{
cout<<b2[n]-b1[1]+1<<endl;
}
return 0;
}