分类讨论一下,模拟即可,需要用一下前缀和来看,插空连接的两组外有没有女生
#include <iostream>
#include<vector>
#include<algorithm>
#include<limits.h>
#include<string>
#include<queue>
#include<cstring>
#include<stack>
#include<math.h>
#include<map>
#include<unordered_map>
#include<bitset>
#define INF INT_MAX -1
#define inf INT_MIN +1
#define ll long long
#define endl "\n"
using namespace std;
int n, m, k; int T, ncase = 0; const int N = 1e5 + 3,mod=1e9+7;
int a[N];string s;int ct1=0,ct2=0;int pre[N];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n;cin>>s;vector<pair<int,int>>ve;
for(int i=1;i<=s.size();i++)pre[i]=pre[i-1]+!(s[i-1]-'0');
for(int i=1;i<=s.size();i++)
{
if(s[i-1]=='0'){
int j=i;
while(j<=s.size()&&s[j-1]=='0'){
j++;ct2++;
}
if(ve.size()){
pair<int,int>p=ve.back();
if(p.second+2==i){
int d=pre[j-1]-pre[p.first-1];//这里面的女生
if(pre[n]-d>=1){
m=max(m,j-p.first);
}
}
}
ve.push_back({i,j-1});
m=max(m,j-i);
if(pre[n]-(pre[j-1]-pre[i-1])){
m=max(m,j-i+1);
}
i=j-1;
}
else ct1++;
}
cout<<m;
return 0;
}