#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int computeXorPairwiseSum(vector<int>& V) {
int N = V.size();
int result = 0;
for (int bit = 0; bit < 29; bit++) {
int mask = (1 << (bit + 1)) - 1; // Mask for last (bit+1) bits
vector<int> modVals(N);
for (int i = 0; i < N; i++) {
modVals[i] = V[i] & mask; // Take only last (bit+1) bits
}
sort(modVals.begin(), modVals.end());
ll count = 0;
for (int i = 0; i < N; i++) {
int low1 = (1 << bit) - modVals[i];
int high1 = (1 << (bit + 1)) - 1 - modVals[i];
int low2 = (1 << (bit + 1)) + (1 << bit) - modVals[i];
int high2 = (1 << (bit + 2)) - 2 - modVals[i];
count += lower_bound(modVals.begin(), modVals.end(), high1 + 1) - lower_bound(modVals.begin(), modVals.end(), low1);
count += lower_bound(modVals.begin(), modVals.end(), high2 + 1) - lower_bound(modVals.begin(), modVals.end(), low2);
// Remove self pair contribution
if ((modVals[i] * 2) & (1 << bit)) {
count--;
}
}
count /= 2; // Each pair is counted twice
if (count % 2 == 1) {
result |= (1 << bit);
}
}
return result;
}
int main() {
int N;
cin >> N;
vector<int> V(N);
for (int i = 0; i < N; i++) {
cin >> V[i];
}
cout << computeXorPairwiseSum(V) << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |