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
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <vector>
#include <map>
#define ll long long
using namespace std;

vector <ll> V;

const ll M = 20'000'100;

ll tab[2*M];
//map<ll,ll> mapa;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n;
    cin>>n;
    ll wynik=0;
    ll m = M;
    vector<ll> tmp;
    for(ll i = 0 ;i < n ;i ++)
    {
        ll x;
        cin>>x;
        V.push_back(x);
    }
    for(ll i = 0 ;i < n ;i ++)
    {
        ll suma = 0;
        for(ll j = i ; j < n ;j ++)
        {
            suma+=V[j];
            ll suma2=suma;
            for(ll l = j+1 ;l < n ;l ++)
            {
                suma2+=V[l];  
                wynik+=tab[M-suma-suma2];          
            }
        }
        suma = 0;
        for(ll j = i ;j < n ;j ++)
        {
            suma+=V[j];
            tab[M+suma]++;
            tmp.push_back(M+suma);
        }
    }
    for(auto I : tmp)
        tab[I]=0;
    tmp.clear();
    for(ll i = n-1;i >= 0  ;i --)
    {
        ll suma = 0;
        for(ll j = i ; j < n ;j ++)
        {
            suma+=V[j];
            ll suma2=suma;
            for(ll l = j+1 ;l < n ;l ++)
            {
                suma2+=V[l];  
                wynik+=tab[M-suma-suma2];          
            }
        }
        suma = 0;
        for(ll j = i ;j < n ;j ++)
        {
            suma+=V[j];
            tab[M+suma]++;
            tmp.push_back(M+suma);
        }
    }
    for(auto I : tmp)
        tab[I]=0;
    tmp.clear();
    for(ll i = 0 ; i < n ;i ++)
    {
        ll suma = 0;
        for(ll j = i ;j <  n; j ++)
        {   
            suma+=V[j];
            ll suma2 = suma;
            for(ll  l = j + 1; l  < n ; l ++)
            {
                suma2+=V[l];
                // if(tab[M-suma-suma2])
                // {
                //     cout<<i<<' '<<j <<' '<<suma<<' '<<l<<' '<<suma2<<endl;
                // }
                wynik+=tab[M-suma-suma2];
            }
            tab[M+suma]++;
            tmp.push_back(M+suma);
        }
        for(auto I : tmp)
        tab[I] = 0;
        tmp.clear();
    }
    for(ll i = n-1 ;i >= 0 ;i --)
    {
        ll suma = 0;
        for(ll j = i ;j < n ;j ++)
        {
            suma+=V[j];
            ll suma2=0;
            for(ll l = i+1 ; l < n ; l ++)
            {
                suma2+=V[l];
                tab[suma+suma2 - V[i] + m]++;
                // tmp.push_back(suma+suma2 - V[i] + m);
                // mapa[suma+suma2 - V[i] + m]++;
            } 
        }
        for(ll j = i + 2 ;j < n ;j ++)
        {
            suma = 0;
            for(ll l = j ; l < n ; l ++)
            {
                suma+=V[l];
                tab[suma+m]++;
                // tmp.push_back(suma + m);
                // mapa[suma+m]++;
            }
        }
        m-=V[i];
        // cout<<i<<":::::: "<<endl;
        // for(auto I : mapa)
        // {
        //     cout<<I.first - m<<' '<<I.second<<endl;
        // }
        // cout<<endl;
        for(ll j = 0 ;j <i ;j ++)
        {
            suma = 0;
            for(ll l = j; l < n ; l ++)
            {
                suma+=V[l];
                wynik+=tab[-suma+m];
            } 
        }
    }
    cout<<wynik;
}