Submission #1293196

#TimeUsernameProblemLanguageResultExecution timeMemory
1293196WonderfulWhaleXOR Sum (info1cup17_xorsum)C++20
100 / 100
680 ms13372 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> v(n); for(int i=0;i<n;i++) cin >> v[i]; int ans = 0; for(int bit=0;bit<30;bit++) { vector<int> zero, one; int l=0, r=-1; for(int x:v) { int mask = (1<<(bit+1))-1; int y = x & ((1<<bit)-1); pair<int, int> range = {(1<<bit) - y, (1<<(bit+1)) - y - 1}; if(x & (1<<bit)) { one.push_back(x); if(r == one.size()-2) r++; } else { zero.push_back(x); if(l == zero.size()-1) l++; } while(l>0 && (zero[l-1]&mask)>=range.first) l--; while(r!=-1 && (one[r]&mask)>range.second) r--; int valid = (zero.size() - l) + (r + 1); int cnt = (x & (1<<bit)) ? (zero.size()+one.size()) - valid : valid; if(cnt % 2) ans ^= 1 << bit; } v = zero; v.insert(v.end(), one.begin(), one.end()); } cout << ans << "\n"; }
#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...