#include <iostream>
#include <vector>
#define nl '\n'
using namespace std;
using ll = long long;
ll counts[20000002];
int n;
ll prefix[501];
vector<ll> vals;
ll res = 0;
int main()
{
cin.tie(0)->sync_with_stdio(0);
cin>>n;
for(int i=1; i<=n; i++){
cin>>prefix[i];
}
for(int i=1; i<=n; i++){
prefix[i] += prefix[i-1];
}
for(int i=1; i<=n; i++){
for(int j=1; j<=i; j++){
counts[prefix[i]-prefix[j-1]+10000000]++;
}
}
vals.reserve(125001);
for(int i=0; i<20000002; i++){
if(counts[i]){
vals.push_back(i-10000000);
}
}
for(int i=0; i<vals.size(); i++){
for(int j=0; j<vals.size(); j++){
if(i==j) continue;
ll sum = vals[i] + vals[j];
//cerr<<vals[i]<<' '<<vals[j]<<' '<<-sum<<nl;
if(-sum == vals[i] || -sum == vals[j]) continue;
ll comb = counts[vals[i] + 10000000] * counts[vals[j] + 10000000] * counts[10000000-sum];
//cerr<<comb<<nl;
res += comb;
}
int eff_add = vals[i] + 10000000;
//cerr<<vals[i]<<' '<<counts[eff_add]<<'\n';
if(vals[i] == 0) continue;
res += counts[eff_add] * (counts[eff_add]-1) * counts[10000000-2*vals[i]] * 3;
}
res += counts[10000000] * (counts[10000000] - 1) * (counts[10000000] - 2);
cout<<res/6<<'\n';
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 | #include <iostream> #include <vector> #define nl '\n' using namespace std; using ll = long long; ll counts[20000002]; int n; ll prefix[501]; vector<ll> vals; ll res = 0; int main() { cin.tie(0)->sync_with_stdio(0); cin>>n; for(int i=1; i<=n; i++){ cin>>prefix[i]; } for(int i=1; i<=n; i++){ prefix[i] += prefix[i-1]; } for(int i=1; i<=n; i++){ for(int j=1; j<=i; j++){ counts[prefix[i]-prefix[j-1]+10000000]++; } } vals.reserve(125001); for(int i=0; i<20000002; i++){ if(counts[i]){ vals.push_back(i-10000000); } } for(int i=0; i<vals.size(); i++){ for(int j=0; j<vals.size(); j++){ if(i==j) continue; ll sum = vals[i] + vals[j]; //cerr<<vals[i]<<' '<<vals[j]<<' '<<-sum<<nl; if(-sum == vals[i] || -sum == vals[j]) continue; ll comb = counts[vals[i] + 10000000] * counts[vals[j] + 10000000] * counts[10000000-sum]; //cerr<<comb<<nl; res += comb; } int eff_add = vals[i] + 10000000; //cerr<<vals[i]<<' '<<counts[eff_add]<<'\n'; if(vals[i] == 0) continue; res += counts[eff_add] * (counts[eff_add]-1) * counts[10000000-2*vals[i]] * 3; } res += counts[10000000] * (counts[10000000] - 1) * (counts[10000000] - 2); cout<<res/6<<'\n'; return 0; } |
English