整体代码较为抽象,但基本思想依旧是前缀和
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x;
struct node{
int s0,s1;
}a[200005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
if(x==0){
a[i].s0=a[i-1].s0+1;
a[i].s1=a[i-1].s1;
}
else{
a[i].s1=a[i-1].s1+1;
a[i].s0=a[i-1].s0;
}
}
for(int i=2;i<=n;i++){
for(int j=i%2;j<=n-m-2;j+=2){
if(a[i].s0-a[j].s0==a[i].s1-a[j].s1){
if(i-j>m){
m=i-j;
break;
}
}
}
}
cout<<m;
return 0;
}