//Jakub Trela #include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); LL n; cin>>n; vector<LL> pref(n+1); LL MAXI=30000003; vector<LL> m(MAXI*2); for(LL i=1;i<=n;i++){ LL a; cin>>a; pref[i]=pref[i-1]+a; } LL ans1=0; for(LL i=0;i<n;i++){ for(LL j=1;j<=n;j++){ for(LL k=j;k<=n;k++){ m[pref[k]-pref[j-1]-pref[i]+MAXI]++; } } for(LL j=1;j<=n;j++){ for(LL k=j;k<=n;k++){ ans1+=m[pref[j-1]-pref[k]-pref[i+1]+MAXI]; } } } m.assign(MAXI*2,0); LL ans2=0; for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ m[pref[j]-pref[i-1]+MAXI]++; } } for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ ans2+=m[2*pref[i-1]-2*pref[j]+MAXI]; } } LL ans3=0; for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ if(pref[j]-pref[i-1]==0)ans3++; } } ans1=ans1-ans2*3+ans3*2; cout<<ans1/6<<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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | //Jakub Trela #include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); LL n; cin>>n; vector<LL> pref(n+1); LL MAXI=30000003; vector<LL> m(MAXI*2); for(LL i=1;i<=n;i++){ LL a; cin>>a; pref[i]=pref[i-1]+a; } LL ans1=0; for(LL i=0;i<n;i++){ for(LL j=1;j<=n;j++){ for(LL k=j;k<=n;k++){ m[pref[k]-pref[j-1]-pref[i]+MAXI]++; } } for(LL j=1;j<=n;j++){ for(LL k=j;k<=n;k++){ ans1+=m[pref[j-1]-pref[k]-pref[i+1]+MAXI]; } } } m.assign(MAXI*2,0); LL ans2=0; for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ m[pref[j]-pref[i-1]+MAXI]++; } } for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ ans2+=m[2*pref[i-1]-2*pref[j]+MAXI]; } } LL ans3=0; for(LL i=1;i<=n;i++){ for(LL j=i;j<=n;j++){ if(pref[j]-pref[i-1]==0)ans3++; } } ans1=ans1-ans2*3+ans3*2; cout<<ans1/6<<endl; return 0; } |