#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int s1[N],s2[N];
int main() {
int n;cin>>n;
for(int i = 1;i<=n;i++){
cin>>a[i];
s1[i] = s1[i-1]+a[i];
s2[i] = s2[i-1]+(a[i]>0?1:0);
// sum+=a[i];
}
int x = s1[n]/3;int ans = 0;
if(s1[n]%3){
cout<<'0'<<'\n';
return 0;
}
for(int i = 1;i<n-1;i++){
if(s2[i]==0||s1[i]!=x){
continue;
}
for(int j = i+1;j<n;j++){
if(s1[j]-s1[i]==x){
int x1 = s2[j]-s2[i];
int x2 = s2[n]-s2[j];
if(x1>0&&x2>0){
ans++;
}
}
}
}
cout<<ans<<'\n';
return 0;
}
// 64 位输出请用 printf("%lld")
题目给出使得每一个子数组中至少存在一个正数,且每个子数组的和都相等,模拟判断正数的多少即可。



京公网安备 11010502036488号