输入
10
0111001011
输出
5
说明
翻转区间[5,10],翻转为0111110100。
只需记录最长的和第二长的连续1的长度,相加即可。可以知道,必定可以使某两段1区间相连。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,flag,cnt,t,a,b;
vector<int>v;
string s;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%1d",&t);
if(t==1){
if(flag==0){
flag=1;
cnt=1;
}
else cnt++;
}
else{
if(flag){
flag=0;
if(cnt>a) b=a,a=cnt;
else if(cnt<=a&&cnt>b) b=cnt;
}
}
}
if(flag){
if(cnt>a) b=a,a=cnt;
else if(cnt<=a&&cnt>b) b=cnt;
}
cout<<a+b;
return 0;
}