记录编号 608897 评测结果 AAAAAAAAAAAAAAA
题目名称 4186.Chocolate Bar Partition 最终得分 100
用户昵称 Gravatar梦那边的美好TE 是否通过 通过
代码语言 C++ 运行时间 0.802 s
提交时间 2025-10-30 14:30:13 内存使用 9.29 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <unordered_map> 
using namespace std;
const int N=2e5+10;
typedef long long ll;
int n,f[N][2];
ll sum,a[N][2],s[N][2];
unordered_map<ll,int>T[2],t[2];
int main(){
	freopen("Chocolate.in","r",stdin);
	freopen("Chocolate.out","w",stdout);
	scanf("%d",&n);
	for(int i=0;i<=1;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&a[j][i]);
			sum+=a[j][i];
		}
	}
	for(int i=0;i<=1;i++){
		for(int j=1;j<=n;j++){
			a[j][i]=2*n*a[j][i]-sum;
			s[j][i]=s[j-1][i]+a[j][i];
		}
	}
	T[0][0]=0,T[1][0]=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=1;j++){
			f[i][j]=max(f[i-1][1],f[i-1][0]);
			if(T[j].count(s[i][j^1]))f[i][j]=max(f[i][j],T[j][s[i][j^1]]+1);
			if(t[j^1].count(s[i][j^1]))f[i][j]=max(f[i][j],t[j^1][s[i][j^1]]+1);
		}
		if(s[i][0]+s[i][1]==0)f[i][0]=f[i][1]=max(f[i][0],f[i][1])+1;
		for(int j=0;j<=1;j++){
			ll sum=s[i][j^1];
			T[j][sum]=max(T[j][sum],f[i][j]);
			t[j][-sum]=max(t[j][-sum],f[i][j]);
		}
	}
	printf("%d\n",f[n][0]);
	return 0;
}