#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=500, MAXA=20000, MAXS=3e7; ll total=0; ll res=0; int arr[MAXN+5]; int pref[MAXN+5]; int suf[MAXN+5]; int przsufCNT[2*MAXS+5]; int przedzialyCNT[2*MAXS+5]; void solve() { int n; cin >> n; for(int i=1;i<=n;i++){ cin >> arr[i]; total += arr[i]; pref[i] = pref[i-1] + arr[i]; } for(int i=n;i>=1;i--){ suf[i] = suf[i+1] + arr[i]; } vector<int> przedzialy; vector<int> przpre; for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ przedzialyCNT[pref[i-1]+suf[j+1]+MAXS]++; przsufCNT[pref[i-1]+suf[j+1]+MAXS]++; przedzialy.push_back(pref[i-1]+suf[j+1]); przpre.push_back(pref[i-1]+suf[j+1]); } } for(int i=2;i<=n;i++){ for(int a : przedzialy){ przsufCNT[a+suf[i]+MAXS]++; } } total*=3; for(int a : przpre){ res += (ll)przsufCNT[total - a + MAXS]; } //cout << res << " "; for(int i=1;i<n;i++){ przpre.clear(); for(int a : przedzialy){ przpre.push_back(a+pref[i]); przsufCNT[a+suf[i+1] + MAXS]--; } for(int a : przpre){ res += (ll)przsufCNT[total - a + MAXS]; } //cout << res << " "; //cout << 'k'; } for(int a : przedzialy){ if(a == total/3) res--; przedzialyCNT[a + MAXS]--; res -= (ll)przedzialyCNT[total - (a * 2) + MAXS] * 3; przedzialyCNT[a + MAXS]++; } //cout << res << " "; cout << res / 6; //cout << 'k'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); 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 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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=500, MAXA=20000, MAXS=3e7; ll total=0; ll res=0; int arr[MAXN+5]; int pref[MAXN+5]; int suf[MAXN+5]; int przsufCNT[2*MAXS+5]; int przedzialyCNT[2*MAXS+5]; void solve() { int n; cin >> n; for(int i=1;i<=n;i++){ cin >> arr[i]; total += arr[i]; pref[i] = pref[i-1] + arr[i]; } for(int i=n;i>=1;i--){ suf[i] = suf[i+1] + arr[i]; } vector<int> przedzialy; vector<int> przpre; for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ przedzialyCNT[pref[i-1]+suf[j+1]+MAXS]++; przsufCNT[pref[i-1]+suf[j+1]+MAXS]++; przedzialy.push_back(pref[i-1]+suf[j+1]); przpre.push_back(pref[i-1]+suf[j+1]); } } for(int i=2;i<=n;i++){ for(int a : przedzialy){ przsufCNT[a+suf[i]+MAXS]++; } } total*=3; for(int a : przpre){ res += (ll)przsufCNT[total - a + MAXS]; } //cout << res << " "; for(int i=1;i<n;i++){ przpre.clear(); for(int a : przedzialy){ przpre.push_back(a+pref[i]); przsufCNT[a+suf[i+1] + MAXS]--; } for(int a : przpre){ res += (ll)przsufCNT[total - a + MAXS]; } //cout << res << " "; //cout << 'k'; } for(int a : przedzialy){ if(a == total/3) res--; przedzialyCNT[a + MAXS]--; res -= (ll)przedzialyCNT[total - (a * 2) + MAXS] * 3; przedzialyCNT[a + MAXS]++; } //cout << res << " "; cout << res / 6; //cout << 'k'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |