#include <bits/stdc++.h> using namespace std; constexpr int M = 505; constexpr int p = 20000000; constexpr int MM = p*2; long long n, tab[M]; long long juzR[MM]; int main(){ cin.tie(0)->sync_with_stdio(0); cin >> n; for(int i=1; i<=n; i++) cin >> tab[i]; for(int i=1; i<=n; i++) tab[i]+=tab[i-1]; //tworzymy sumy prefiksowe long long wynik = 0; for(int i=0; i<=n; i++){ for(int j=0; j<=n; j++) for(int k=j+1; k<=n; k++){ long long temp = tab[i]+tab[k]-tab[j] + p; wynik = wynik + juzR[temp]; //szukamy dla danej sumy sum prefiksowych pary } for(int k=0; k<=n; k++) for(int j=k+1; j<=n; j++){ long long temp = tab[i]+tab[k]-tab[j] + p; juzR[temp]++; //dla przyszłych pokoleń dodajemy tą 3 } } for(int i=0; i<MM; i++) juzR[i]=0; //czyścimy mape for(int i=0; i<=n; i++) for(int j=i+1; j<=n; j++){ long long temp = p+tab[j]-tab[i]; juzR[temp]++; //szukamy par } for(int i=0; i<=n; i++) for(int j=i+1; j<=n; j++){ long long temp = p+2*(tab[i]-tab[j]); if(6*p>temp && temp>=0) wynik -= 3*juzR[temp]; //poprawiamy wynik o sytaucje w której pytamy o te same pary } for(int i=0; i<MM; i++) juzR[i]=0; //czyścimy mape for(int i=0; i<=n; i++){ long long temp = tab[i]+p; wynik = wynik + juzR[temp]; juzR[temp]+=2; } wynik = wynik / 6; cout << wynik << endl; return 0; }
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; constexpr int M = 505; constexpr int p = 20000000; constexpr int MM = p*2; long long n, tab[M]; long long juzR[MM]; int main(){ cin.tie(0)->sync_with_stdio(0); cin >> n; for(int i=1; i<=n; i++) cin >> tab[i]; for(int i=1; i<=n; i++) tab[i]+=tab[i-1]; //tworzymy sumy prefiksowe long long wynik = 0; for(int i=0; i<=n; i++){ for(int j=0; j<=n; j++) for(int k=j+1; k<=n; k++){ long long temp = tab[i]+tab[k]-tab[j] + p; wynik = wynik + juzR[temp]; //szukamy dla danej sumy sum prefiksowych pary } for(int k=0; k<=n; k++) for(int j=k+1; j<=n; j++){ long long temp = tab[i]+tab[k]-tab[j] + p; juzR[temp]++; //dla przyszłych pokoleń dodajemy tą 3 } } for(int i=0; i<MM; i++) juzR[i]=0; //czyścimy mape for(int i=0; i<=n; i++) for(int j=i+1; j<=n; j++){ long long temp = p+tab[j]-tab[i]; juzR[temp]++; //szukamy par } for(int i=0; i<=n; i++) for(int j=i+1; j<=n; j++){ long long temp = p+2*(tab[i]-tab[j]); if(6*p>temp && temp>=0) wynik -= 3*juzR[temp]; //poprawiamy wynik o sytaucje w której pytamy o te same pary } for(int i=0; i<MM; i++) juzR[i]=0; //czyścimy mape for(int i=0; i<=n; i++){ long long temp = tab[i]+p; wynik = wynik + juzR[temp]; juzR[temp]+=2; } wynik = wynik / 6; cout << wynik << endl; return 0; } |