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