Submission #1318224

#TimeUsernameProblemLanguageResultExecution timeMemory
1318224g31niusXOR Sum (info1cup17_xorsum)C++20
45 / 100
1691 ms8180 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector<int> v(n); for (int i = 0; i < n; ++i) cin >> v[i]; // Precalcul pentru diagonala: bitCount[b] = cate V_i au bitul b setat const int MAXB = 31; // suficient pt sume pana la ~1e9 array<long long, MAXB> bitCount{}; // long long pentru n mare for (int x : v) { for (int b = 0; b < MAXB; ++b) if (x & (1LL << b)) bitCount[b]++; } long long ans = 0; vector<int> w(n); for (int k = 0; k < 31; ++k) { int mod = 1 << (k + 1); // 2^(k+1) int half = 1 << k; // 2^k int mask = mod - 1; for (int i = 0; i < n; ++i) w[i] = v[i] & mask; sort(w.begin(), w.end()); long long cntPairs = 0; // numar perechi i<j cu bitul k aprins for (int i = 0; i < n; ++i) { // Interval 1: [L1, R1] = [half - w[i], mod-1 - w[i]] int L1 = half - w[i]; int R1 = (mod - 1) - w[i]; // Interval 2: [L2, R2] = [mod + half - w[i], 2*mod - 2 - w[i]] int L2 = (mod + half) - w[i]; int R2 = (2 * mod - 2) - w[i]; // Taiere la [0, mod-1] auto count_in = [&](int L, int R) -> long long { if (L < 0) L = 0; if (R > mask) R = mask; if (L > R) return 0LL; auto itL = lower_bound(w.begin() + i + 1, w.end(), L); auto itR = upper_bound(w.begin() + i + 1, w.end(), R); return max(0LL, (long long)(itR - itL)); }; cntPairs += count_in(L1, R1); cntPairs += count_in(L2, R2); } // Paritatea perechilor i<j care aprind bitul k int pairsParity = (int)(cntPairs & 1LL); // Paritatea diagonelei (i=i): pentru k>=1 e paritatea bitCount[k-1]; pentru k=0 e 0 int diagParity = (k == 0) ? 0 : (int)(bitCount[k - 1] & 1LL); if ((pairsParity ^ diagParity) == 1) ans |= (1LL << k); } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...