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
#include<bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define PB push_back
typedef long long ll;
typedef long double ld;
#define REP(x,y) for(int x=0;x<(y);x++)
#define ROF(x,y) for(int x=(y);x>0;x--)
#define FOR(x,z,y) for(int x=(z);x<=(y);x++)
#define INT(x) int x;scanf("%d ",&x)
#define LL(x) ll x;scanf("%lld",&x)
#define CZ(x) char x;scanf(" %c",&x)
typedef pair<int,bool> pib;

int t[505];

map<int,ll> m;

int main(){
    INT(n);
    FOR(i,1,n){
        scanf("%d",t+i);
    }
    FOR(i,1,n){
        t[i] += t[i-1];
    }
    FOR(i,0,n){
        FOR(j,i+1,n){
            m[t[j]-t[i]]++;
        }
    }
    ll res = 0;
    for(auto it=m.begin();it!=m.end();it++){
        if(it->f == 0 && it->s >= 3){
            res += it->s * (it->s-1) * (it->s-2) / 6;
        }
        else if(it->s >=2 && m.find(-2*it->f) != m.end()){
            res += it->s * (it->s-1) / 2 * m[-2*it->f];
        }
        for(auto it2=next(it,1);it2!=m.end();it2++){
            auto it3 = m.find(-(it2->f + it->f));
            if(it3!= m.end() && it3->f>it2->f) {
                res += it->s * it2->s * it3->s;
            }
        }
    }
    printf("%lld\n",res);
}