Submission #1023386

#TimeUsernameProblemLanguageResultExecution timeMemory
1023386NintsiChkhaidzeXOR Sum (info1cup17_xorsum)C++17
0 / 100
348 ms45624 KiB
#include <bits/stdc++.h> #include <ostream> #define pb push_back #define s second #define f first #define pb push_back #define pii pair <int,int> #define ll long long #define left h*2,l,(l + r)/2 #define right h*2+1,(l + r)/2 + 1,r #define int ll using namespace std; const int N = 1e6 + 5,inf = 1e9; int a[N]; pii arr[N],b[N]; bool fix[N]; signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int n; cin>>n; for (int i = 1; i <= n; i++){ cin >> a[i]; } for (int j = 1; j <= n; j++) arr[j] = {(a[j] & ((1<<(0 + 1)) - 1)),j}; sort(arr+1,arr+n+1); int ans=0,add=0; for (int i = 0; i <= 30; i++){ int m = n; for (int j = 1; j <= n; j++){ int bb = ((a[arr[j].s] >> i) & 1); if(bb > 0) fix[j] = 1,arr[++m] = arr[j]; } int idx = 0; for (int j = 1; j <= m; j++){ if (fix[j]) continue; b[++idx] = arr[j]; } for (int j = 1; j <= n; j++){ int x = b[j].s; arr[j] = {(a[x] & ((1<<(i + 1)) - 1)),x}; fix[j] = 0; } vector <pair <pii,int> > v; for (int j = 1; j <= n; j++){ int sum = ((arr[j].f + arr[n].f) >> i) & 3; if (v.size() && v.back().s == sum) v.back().f.s += 1; else { v.pb({{j,j},sum}); } } int cnt = 0,add = 0; /* for (int j = n; j >= 1; j--){ vector <pair<pii,int> > vnew; for (int k = 0; k < v.size(); k++){ int l = v[k].f.f,r = v[k].f.s,val = v[k].s; while (r + 1 <= n){ int sum = (((arr[r + 1].f + arr[j].f) >> i) & 3); if (sum == val) r += 1; else break; } while (l <= n){ int sum = (((arr[l].f + arr[j].f) >> i) & 3); if (sum != val) l += 1; else break; } if (l <= r){ vnew.pb({{l,r},val}); } } sort(vnew.begin(),vnew.end()); int id = 1,k = 0; vector <pair<pii,int> > vec; while (k < vnew.size()){ if (id == vnew[k].f.f){ vec.pb(vnew[k]); id = vnew[k].f.s + 1; k++; }else{ int l = id,r = id,val = (((arr[id].f + arr[j].f) >> i) & 3); while (r + 1 <= n){ int sum = (((arr[r + 1].f + arr[j].f) >> i) & 3); if (sum == val) r += 1; else break; } vec.pb({{l,r},val}); id = r + 1; } } sort(vec.begin(),vec.end()); for (int k = 0; k <vec.size(); k++){ int s = vec[k].s; if (s == 3 || s == 1){ int l = vec[k].f.f,r = vec[k].f.s; l = max(l,j); cnt += max(0LL,(r - l + 1)); } } v = vec; }*/ if (cnt & 1) ans |= (1LL<<i); } cout<<ans; }

Compilation message (stderr)

xorsum.cpp: In function 'int main()':
xorsum.cpp:62:17: warning: unused variable 'add' [-Wunused-variable]
   62 |     int cnt = 0,add = 0;
      |                 ^~~
xorsum.cpp:33:13: warning: unused variable 'add' [-Wunused-variable]
   33 |   int ans=0,add=0;
      |             ^~~
#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...