求助P1114
  • 板块灌水区
  • 楼主ChenDaxiana
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/22 18:52
  • 上次更新2024/10/22 20:30:27
查看原帖
求助P1114
1109858
ChenDaxiana楼主2024/10/22 18:52

为啥wa了三个点,思路就是记录第一次出现与最后出现位置,用前缀和

题目传送


#include<bits/stdc++.h>
using namespace std;
#define int long long 
int n; 
int a[100005];
int sum[100005],maxn,ans;
map<int,int>stat;
map<int,int>last;
int read(){
	int x=0,f=1;
	char ch  = getchar();
	while (ch < 48 || ch > 57){
		if (ch == 45){
			f = -1;
		}
		ch = getchar();
	}
	while (ch >= 48 && ch <= 57){
		x = (x << 1) + (x << 3) + (ch - 48);
		ch = getchar();
	} 
	return  x * f;
}
signed main(){
	 n = read();
	for (int i=1; i<=n; i++){
		a[i] = read();
		if (a[i] == 0) a[i] = -1;
		sum[i] = sum[i-1]+a[i];
		stat[sum[i]] = 0;
		last[sum[i]] = 0;
	}
	for (int i=1; i<=n; i++){
		last[sum[i]] = i;
		if (stat[sum[i]] > 0){
			continue;
		}
		else {
			stat[sum[i]] = i;
		}
	}
	for (int i=1; i<=n; i++){
		if (stat[sum[i]] == last[sum[i]]){
			continue;
		}
		ans = last[sum[i]] - stat[sum[i]];
		maxn = max(ans,maxn);
	}
	cout << maxn;
	return 0;
}

2024/10/22 18:52
加载中...