#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; }
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; } |