#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define all(x) (x).begin(), (x).end() #define mid ((l+r)/2) #define siz(x) (int)(x).size() #define BOOST ios_base::sync_with_stdio(0), cin.tie(0) #define deb(x) cout << #x << ": " << x << "\n" typedef long long ll; typedef long double ld; typedef pair<int, int> ii; const int N = 505, M = 1e8, M2 = M/2; int m[M]; int t[N]; int pref[N]; int seg(int a, int b){ if(a > b) return 0; if(a == 0) return pref[b]; return pref[b] - pref[a-1]; } int main(){ BOOST; int n; cin >> n; for(int i=0; i<n; i++){ cin >> t[i]; pref[i] = t[i]; } for(int i=1; i<n; i++) pref[i] += pref[i-1]; ll ans = 0; // ll vans[5] = {0, 0, 0, 0, 0}; for(int i=n-2; i>=0; i--){ // ustalenie 3 for(int j=i+1; j<n; j++){ m[seg(i+1, j) + M2]++; } // ustalenie 1, 2 for(int j=i; j<n; j++){ for(int k=j+1; k<n; k++){ ans += m[-(seg(i, j) + seg(i, k)) + M2]; // vans[1] += m[-(seg(i, j) + seg(i, k))]; } } } for(int i=n-2; i>=0; i--){ for(int j=i+1; j<n; j++){ m[seg(i+1, j) + M2]--; } } for(int i=1; i<n; i++){ // ustalenie 1 for(int j=i-1; j<n; j++){ m[seg(i-1, j) + M2]++; } for(int j=i; j<n; j++){ for(int k=j+1; k<n; k++){ ans += m[-(seg(i, j) + seg(i, k)) + M2]; // vans[2] += m[-(seg(i, j) + seg(i, k))]; } } } for(int i=1; i<n; i++){ for(int j=i-1; j<n; j++){ m[seg(i-1, j) + M2]--; } } // 1, 2, 3 różne starty for(int i=n-2; i>=1; i--){ for(int j=i+1; j<n; j++){ for(int k=i; k<n; k++){ m[seg(i+1, j) + seg(0, k) + M2]++; } } for(int j=i+2; j<n; j++){ for(int k=j; k<n; k++){ m[seg(j, k) + seg(0, i) + M2]++; } } for(int j=0; j<i; j++){ for(int k=j; k<n; k++){ ans += m[-(seg(j, k) -seg(0, i-1)) + M2]; // vans[3] += m[-(seg(j, k) -seg(0, i-1))]; } } } for(int i=n-2; i>=1; i--){ for(int j=i+1; j<n; j++){ for(int k=i; k<n; k++){ m[seg(i+1, j) + seg(0, k) + M2]--; } } for(int j=i+2; j<n; j++){ for(int k=j; k<n; k++){ m[seg(j, k) + seg(0, i) + M2]--; } } } // 1, 2, 3 te same starty for(int i=n-1; i>=0; i--){ for(int j=i+1; j<n; j++){ for(int k=j+1; k<n; k++){ m[seg(0, i) + seg(0, j) + seg(0, k) + M2]++; } } ans += m[3*seg(0, i-1) + M2]; // vans[4] += m[3*seg(0, i-1)]; } for(int i=n-1; i>=0; i--){ for(int j=i+1; j<n; j++){ for(int k=j+1; k<n; k++){ m[seg(0, i) + seg(0, j) + seg(0, k) + M2]--; } } } // for(int i=1; i<=4; i++){ // cout << vans[i] << " "; // } cout << ans << "\n"; }
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define all(x) (x).begin(), (x).end() #define mid ((l+r)/2) #define siz(x) (int)(x).size() #define BOOST ios_base::sync_with_stdio(0), cin.tie(0) #define deb(x) cout << #x << ": " << x << "\n" typedef long long ll; typedef long double ld; typedef pair<int, int> ii; const int N = 505, M = 1e8, M2 = M/2; int m[M]; int t[N]; int pref[N]; int seg(int a, int b){ if(a > b) return 0; if(a == 0) return pref[b]; return pref[b] - pref[a-1]; } int main(){ BOOST; int n; cin >> n; for(int i=0; i<n; i++){ cin >> t[i]; pref[i] = t[i]; } for(int i=1; i<n; i++) pref[i] += pref[i-1]; ll ans = 0; // ll vans[5] = {0, 0, 0, 0, 0}; for(int i=n-2; i>=0; i--){ // ustalenie 3 for(int j=i+1; j<n; j++){ m[seg(i+1, j) + M2]++; } // ustalenie 1, 2 for(int j=i; j<n; j++){ for(int k=j+1; k<n; k++){ ans += m[-(seg(i, j) + seg(i, k)) + M2]; // vans[1] += m[-(seg(i, j) + seg(i, k))]; } } } for(int i=n-2; i>=0; i--){ for(int j=i+1; j<n; j++){ m[seg(i+1, j) + M2]--; } } for(int i=1; i<n; i++){ // ustalenie 1 for(int j=i-1; j<n; j++){ m[seg(i-1, j) + M2]++; } for(int j=i; j<n; j++){ for(int k=j+1; k<n; k++){ ans += m[-(seg(i, j) + seg(i, k)) + M2]; // vans[2] += m[-(seg(i, j) + seg(i, k))]; } } } for(int i=1; i<n; i++){ for(int j=i-1; j<n; j++){ m[seg(i-1, j) + M2]--; } } // 1, 2, 3 różne starty for(int i=n-2; i>=1; i--){ for(int j=i+1; j<n; j++){ for(int k=i; k<n; k++){ m[seg(i+1, j) + seg(0, k) + M2]++; } } for(int j=i+2; j<n; j++){ for(int k=j; k<n; k++){ m[seg(j, k) + seg(0, i) + M2]++; } } for(int j=0; j<i; j++){ for(int k=j; k<n; k++){ ans += m[-(seg(j, k) -seg(0, i-1)) + M2]; // vans[3] += m[-(seg(j, k) -seg(0, i-1))]; } } } for(int i=n-2; i>=1; i--){ for(int j=i+1; j<n; j++){ for(int k=i; k<n; k++){ m[seg(i+1, j) + seg(0, k) + M2]--; } } for(int j=i+2; j<n; j++){ for(int k=j; k<n; k++){ m[seg(j, k) + seg(0, i) + M2]--; } } } // 1, 2, 3 te same starty for(int i=n-1; i>=0; i--){ for(int j=i+1; j<n; j++){ for(int k=j+1; k<n; k++){ m[seg(0, i) + seg(0, j) + seg(0, k) + M2]++; } } ans += m[3*seg(0, i-1) + M2]; // vans[4] += m[3*seg(0, i-1)]; } for(int i=n-1; i>=0; i--){ for(int j=i+1; j<n; j++){ for(int k=j+1; k<n; k++){ m[seg(0, i) + seg(0, j) + seg(0, k) + M2]--; } } } // for(int i=1; i<=4; i++){ // cout << vans[i] << " "; // } cout << ans << "\n"; } |