P1114 “非常男女”计划

原题链接

反思

前缀和处理区间和问题
观察到男女数相同以及输入数据01,有一种互斥相消的感觉,我们可以令0为-1,当某个区间段的和为零,即某两个前缀和相同时,记录其最长距离

code

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[100005]={0};
    int pres=0;
    map<int,int> q;
    q[0]=0;
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(!a[i])a[i]=-1;
        pres+=a[i];
        if(!q.count(pres)) q[pres]=i;
        else ans=max(ans,i-q[pres]);
    }
    cout<<ans<<endl;
    return 0;
}

posted @ 2024-02-08 00:01  纯粹的  阅读(63)  评论(0)    收藏  举报