#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")

题目给出使得每一个子数组中至少存在一个正数,且每个子数组的和都相等,模拟判断正数的多少即可。

活动地址https://www.nowcoder.com/discuss/726480854079250432