이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define F first
#define S second
#define V vector
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << "LINE(" << __LINE__ << "): " << #x << " is " << x << endl
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;
const int INF = 1e9 + 7, N = 1e6 + 1;
signed main()
{
ios::sync_with_stdio(0), cin.tie(0);
mt19937 rng(time(0));
int n;
cin >> n;
//n = 10;
vi a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
//a[i] = rng() % 100;
}
/*int myans = 0;
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
myans ^= a[i] + a[j];
debug(myans);
*/
int ans = 0;
for(int bit = 0; bit < 30; bit++) {
ll cnt = 0;
vi aux(n);
for(int i = 0; i < n; i++) {
aux[i] = a[i] & ((1 << (bit + 1)) - 1);
if((a[i] * 2) >> bit & 1) cnt++;
}
sort(ALL(aux));
for(int i = 0; i < n; i++) {
auto go = [&] (ll lb, ll rb) {
lb -= aux[i], rb -= aux[i];
cnt += upper_bound(ALL(aux), rb) - lower_bound(ALL(aux), lb);
};
go(1 << bit, (1 << (bit + 1)) - 1);
go(3 << bit, (2LL << (bit + 1)) - 1);
}
//debug(cnt);
assert(cnt % 2 == 0);
cnt /= 2;
if(cnt & 1) ans |= 1 << bit;
}
cout << ans << '\n';
}
# | 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... |