题解 | #不知道叫什么名字#
星期几考试?
https://ac.nowcoder.com/acm/contest/71512/A
一道基本算法题就是一道找最大0和1数量相同的01子串问题
这里可以直接用unordered_map解决
#include <bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define ll long long
const int maxn=1e5+5;
int arr[maxn],pre_sum[maxn];
unordered_map <int, int> mp;
int main()
{
//freopen("","r",stdin);
//freopen("","w",stdout);
ios;
int n;
cin>>n;
mp[0]=0;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
arr[i]=arr[i]==0?-1:1;
int x=pre_sum[i]=pre_sum[i-1]+arr[i];
if(x==0)
{
continue;
}
mp[x]=mp[x]?mp[x]:i;
}
int ans=0;
for(int i=1;i<=n;i++)
{
ans=max(ans,i-mp[pre_sum[i]]);
}
cout<<ans<<endl;
return 0;
}