Submission #67963

#TimeUsernameProblemLanguageResultExecution timeMemory
67963ekremXOR Sum (info1cup17_xorsum)C++98
77 / 100
1318 ms20856 KiB
#include <bits/stdc++.h> #define st first #define nd second #define mp make_pair #define pb push_back #define N 1000005 using namespace std; typedef pair < int , int > ii; int n, ans, ind, xx, x, y, z, say, a[N]; ii b[N], c[N]; int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d",&n); for(int i = 1; i <= n; i++){ scanf("%d",a + i); b[i] = mp(a[i]%2, i); } for(int i = 1; i <= n; i++){ if(b[i].st) c[++xx] = b[i]; else b[++ind] = b[i]; } for(int i = 1; i <= xx; i++) b[++ind] = c[i]; for(int k = 0; k <= 28; k++){ x = y = z = n + 1; say = 0; for(int i = 1; i <= n; i++){ while(x >= 2 and b[x - 1].st >= (1<<k) - b[i].st)x--; while(y >= 2 and b[y - 1].st >= (1<<(k+1) ) - b[i].st)y--; while(z >= 2 and b[z - 1].st >= (1<<k) + (1<<(k+1)) - b[i].st)z--; say += max(y, i) - max(x, i); say += n - max(z, i) + 1; say = say%2; } ind = xx = 0; for(int i = 1; i <= n; i++){ if(a[b[i].nd ]&(1<<(k + 1))) c[++xx] = (mp(b[i].st + (a[b[i].nd ]&(1<<(k + 1))) , b[i].nd)); else b[++ind] = b[i]; } for(int i = 1; i <= xx; i++) b[++ind] = c[i]; ans += (1<<k)*(say%2); } printf("%d\n", ans); return 0; }

Compilation message (stderr)

xorsum.cpp: In function 'int main()':
xorsum.cpp:17:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
xorsum.cpp:19:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",a + i);
   ~~~~~^~~~~~~~~~~~
#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...