#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")
题目给出使得每一个子数组中至少存在一个正数,且每个子数组的和都相等,模拟判断正数的多少即可。