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
#include <vector>
#include <utility>
#include <cstdio>

#define REP(a, n) for (int a = 0; a < (n); ++a)
#define FOR(a, b, c) for (int a = (b); a <= (c); ++a)
#define FORD(a, b, c) for (int a = (b); a >= (c); --a)

using namespace std;

typedef long long LL;

///////////////////////////

int N;
int ciag[500], sumaod[505];

int ile_o[60'000'010], *ile = ile_o+30'000'005;
int zwykle_o[60'000'010], *zwykle = zwykle_o+30'000'005;
LL res = 0;

int main() {
    scanf("%d", &N);
    REP(a, N)
        scanf("%d", &ciag[a]);
    FORD(a, N-1, 0)
        sumaod[a] = sumaod[a+1]+ciag[a];
    FORD(c, N-1, 0) {
        int d = c;
        REP(e, N)
            FOR(f, e, N-1)
                ile[-sumaod[d+1]+sumaod[e]-sumaod[f+1]]++;
        REP(a, N)
            FOR(b, a, N-1)
                res += ile[-(sumaod[a]-sumaod[b+1]+sumaod[c])];
    }
    REP(e, N)
        FOR(f, e, N-1)
            zwykle[sumaod[e]-sumaod[f+1]]++;
    REP(a, N)
        FOR(b, a, N-1)
            res -= 3*zwykle[-2*(sumaod[a]-sumaod[b+1])];
    REP(a, N)
        FOR(b, a, N-1)
            if (sumaod[a]-sumaod[b+1]==0)
                res+=2;

    printf("%lld\n", res/6);
    
}