解题思路:计算每一次的男女数量差以及相同差的序号,最后扫描一遍,找到最长即可,需要注意一类数据比如 0,1时,答案应该为2,所以序号从1~n开始遍历,但是mp[0]=[0]。
#include<bits/stdc++.h>
#define MAX 100001
using namespace std;
using gg=long long;
gg n;
int arr[MAX];
int res = 0;
map<int,vector<int> > mp;
int main()
{
cin>>n;
int sum0=0,sum1=0;
int x;
mp[0].push_back(0);//这里非常关键
for(int i=1;i<=n;i++)
{
cin>>x;
if(x)sum1+=1;
else sum0+=1;
arr[i]=(sum1-sum0);
mp[arr[i]].push_back(i);
}
for(map<int,vector<int> >::iterator it=mp.begin();it!=mp.end();it++)
{
vector<int> temp = it->second;
int size = temp.size();
res = max(res,temp[size-1]-temp[0]);
}
cout<<res<<"\n";
return 0;
}