1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include<bits/stdc++.h>

using namespace std;

int n;
int ucb[510];
long long pre[510];
multiset<long long> sums;

void mule(long long x){
    auto it = sums.find(x);
    if(it != sums.end()) sums.erase(it);
}

int main(){
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(false);

    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> ucb[i];
    }
    for(int i = 1; i <= n; i++){
        pre[i] = pre[i-1] + ucb[i];
    }
    
    // for(int p1 = 1; p1 <= n; p1++){
    //     for(int k1 = i; k1 <= n; k1++){
    //         sums.insert(pre[k1] - pre[p1-1]);
    //     }
    // }

    long long ans = 0;
    long long tmp1,tmp2;
    for(int p1 = 1; p1 <= n; p1++){
        for(int k1 = p1; k1 <= n; k1++){
            for(int p2 = 1; p2 <= n; p2++){
                for(int k2 = p2; k2 <= n; k2++){
                    if(p1 == p2 && k1 == k2) continue;
                    for(int p3 = 1; p3 <= n; p3++){
                        for(int k3 = p3; k3 <= n; k3++){
                            if(p1 == p3 && k1 == k3) continue;
                            if(p3 == p2 && k3 == k2) continue;
                            if(pre[k3] + pre[k2] + pre[k1] - pre[p1-1]- pre[p2-1]- pre[p3-1] == 0) ans++;
                        }
                    }
                    // tmp1 = pre[k1] - pre[p1-1];
                    // tmp2 = pre[k2] - pre[p2-1];
                    // mule(tmp1);
                    // mule(tmp2);
                    // if(sums.find((tmp1 + tmp2) * -1) != sums.end()) ans ++;

                }
            }
        }

    }
    cout << ans/6 << "\n";
}