#include<bits/stdc++.h> using namespace std; const int N = 500 + 5, S = 2e7 + 5; int n = 0, a[N] = {}, p[N] = {}, c[S << 1] = {}; long long ans = 0; int main(){ scanf("%d", &n); for(int i = 1 ; i <= n ; i ++){ scanf("%d", &a[i]); p[i] = p[i - 1] + a[i]; } for(int i = 1 ; i <= n ; i ++){ for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) c[S + (p[r] - p[l - 1] - p[i - 1])] ++; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) ans += c[S - (p[r] - p[l - 1] + p[i])]; } memset(c, 0, sizeof(c)); for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) c[S + 2 * (p[r] - p[l - 1])] ++; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) ans -= 3 * c[S - (p[r] - p[l - 1])]; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) if(p[r] - p[l - 1] == 0) ans += 2; printf("%lld\n", ans / 6); 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 | #include<bits/stdc++.h> using namespace std; const int N = 500 + 5, S = 2e7 + 5; int n = 0, a[N] = {}, p[N] = {}, c[S << 1] = {}; long long ans = 0; int main(){ scanf("%d", &n); for(int i = 1 ; i <= n ; i ++){ scanf("%d", &a[i]); p[i] = p[i - 1] + a[i]; } for(int i = 1 ; i <= n ; i ++){ for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) c[S + (p[r] - p[l - 1] - p[i - 1])] ++; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) ans += c[S - (p[r] - p[l - 1] + p[i])]; } memset(c, 0, sizeof(c)); for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) c[S + 2 * (p[r] - p[l - 1])] ++; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) ans -= 3 * c[S - (p[r] - p[l - 1])]; for(int l = 1 ; l <= n ; l ++) for(int r = l ; r <= n ; r ++) if(p[r] - p[l - 1] == 0) ans += 2; printf("%lld\n", ans / 6); return 0; } |