还是前缀和,主要是全0和全1的情况特殊判断一下
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int main(){
static char s[1000000+10];
scanf("%s",s);
static int a1[1000000+10]={0};
static int a0[1000000+10]={0};
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='1') a1[i]=a1[i-1]+1,a0[i]=a0[i-1];
else a0[i]=a0[i-1]+1,a1[i]=a1[i-1];
}
int sum=0;
int maxn=-1;
if(a1[len-1]==0){
cout<<0<<endl;
return 0;
}
if(a0[len-1]==0){
cout<<len<<endl;
return 0;
}
for(int i=1;i<len-1;i++){
if(a0[i-1]==a1[len-1]-a1[i-1]){
printf("%d",i);
return 0;
}
}
cout<<-1;
return 0;
}