70pt
查看原帖
70pt
317400
Foggy_night楼主2023/10/19 12:56
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
const int N = 500005;
int sum_a[N], sum_b[N], z[N];
map<int, int> vis; 
int maxn;
int main(){
	int n;
	scanf("%d", &n);
	sum_b[0] = sum_a[0] = 0;
	for(int i = 1; i <= n; i++){
		int a;
		scanf("%d", &a); 
		if(a == 1){//男生 
			sum_a[i] = sum_a[i-1] + 1; 
			sum_b[i] = sum_b[i-1];
		}
		else{
			sum_a[i] = sum_a[i-1];
			sum_b[i] = sum_b[i-1] + 1;
		}
		z[i] = sum_a[i] - sum_b[i];
		if(!vis[z[i]]) vis[z[i]] = i;//判断当前位置男,女是否相等 
		else maxn = max(maxn, i - vis[z[i]]);
	}
	printf("%d", maxn);
	return 0;
}
2023/10/19 12:56
加载中...