计蒜客 - T1853 非常男女(前缀和)

题意:找出男女人数相等的连续子序列长度。

题记:将所有的0变成-1,然后直接枚举前缀和数组,找到a[j]-a[i]==0时更新答案。

#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N=1e5+10;
//int num[10]={6,2,5,5,4,5,6,3,7,6};
int a[N];
int main(){
     
    int n;
    scanf("%d",&n);
    a[0]=0;
    for(int i=1;i<=n;i++){
     
        scanf("%d",&a[i]);
        if(a[i]==0) a[i]=-1;
        a[i]+=a[i-1];
    }
    int ans=0;
    for(int i=0;i<=n;i++){
     
        for(int j=n;j>i;j--){
     
            if(j-i<ans) break;
            if(a[j]-a[i]==0){
     
                if(ans<j-i) ans=j-i;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

你可能感兴趣的:(计蒜客)