分类讨论一下,模拟即可,需要用一下前缀和来看,插空连接的两组外有没有女生

#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;
}