Submission #270505

#TimeUsernameProblemLanguageResultExecution timeMemory
270505Atill83XOR Sum (info1cup17_xorsum)C++14
0 / 100
1171 ms67020 KiB
#include <bits/stdc++.h> #define ff first #define ss second #define endl '\n' using namespace std; const long long INF = (long long) 1e18; const int mod = (int) 1e9+7; const int MAXN = (int) 1e6+5; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; ll n; int v[MAXN]; pll b[MAXN], nw[MAXN]; int pw[45]; const int L = 29; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); cin>>n; for(ll i = 0; i < n; i++){ cin>>v[i]; b[i] = {v[i] % 2, i}; } sort(b, b + n); pw[0] = 1; for(ll i = 1; i < L; i++){ pw[i] = pw[i - 1] * 2; } int ans = 0; for(ll i = 0; i < L; i++){ ll cnt = 0; int r3 = n, r2 = n, r1 = n; for(int j = 0; j < n; j++){ while(r3 && b[j].ff + b[r3 - 1].ff >= pw[i] + pw[i + 1]) r3--; while(r2 && b[j].ff + b[r2 - 1].ff >= pw[i + 1]) r2--; while(r1 && b[j].ff + b[r1 - 1].ff >= pw[i]) r1--; cnt += n - r1 - (r3 - r2); } for(int j = 0; j < n; j++){ if((2LL*b[j].ff) & pw[i]) cnt++; } assert(cnt % 2 == 0); cnt /= 2; if(cnt % 2) ans += pw[i]; if(i + 1 == L) break; int last = 0; for(int j = 0; j < n; j++){ if((v[b[j].ss] & pw[i + 1]) == 0) nw[last++] = b[j]; } for(int j = 0; j < n; j++){ if((v[b[j].ss] & pw[i + 1]) != 0){ b[j].ff += pw[i + 1]; nw[last++] = b[j]; } } for(int j = 0; j < n; j++){ b[j] = nw[j]; nw[j] = {-1, -1}; } assert(last == n); } cout<<ans<<endl; #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#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...