제출 #270450

#제출 시각아이디문제언어결과실행 시간메모리
270450Atill83XOR Sum (info1cup17_xorsum)C++14
77 / 100
1619 ms39628 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; ll v[MAXN]; pll b[MAXN]; pll nw[MAXN]; ll pw[45]; const ll L = 31; 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); for(ll i = 0; i <= L; i++){ pw[i] = (1LL<<i); } ll ans = 0; for(ll i = 0; i < L; i++){ ll cnt = 0; ll r3 = n, r2 = n, r1 = n; for(ll 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(ll 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; ll last = 0; for(ll j = 0; j < n; j++){ if((v[b[j].ss] & pw[i + 1]) == 0){ nw[last++] = b[j]; } } for(ll 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(ll 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...