Submission #468402

#TimeUsernameProblemLanguageResultExecution timeMemory
468402cpp219XOR Sum (info1cup17_xorsum)C++14
7 / 100
1684 ms25068 KiB
#include <bits/stdc++.h> #define ll int #define ld long double #define fs first #define sc second #define debug(y) cout<<y,exit(0) using namespace std; typedef pair<ll,ll> LL; const ll N = 1e6 + 9; const ll Log2 = 23; const ll inf = 1e9 + 7; vector<ll> g[2]; ll n,a[N],pos[N],val[N],ans,b[N]; ll Getval(ll x,ll i){ return (((1 << i + 1) - 1) & x); } bool chk(ll x,ll i){ return (x >> i) & 1; } void updateArr(){ for (ll i = 1;i <= n;i++) b[pos[i]] = a[i]; for (ll i = 1;i <= n;i++) a[i] = b[i]; } int main(){ ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); #define task "test" if (fopen(task".INP","r")){ freopen(task".INP","r",stdin); freopen(task".out","w",stdout); } cin>>n; for (ll i = 1;i <= n;i++) cin>>a[i]; for (ll bit = 0;bit < 30;bit++){ g[0].clear(); g[1].clear(); for (ll i = 1;i <= n;i++) g[chk(a[i],bit)].push_back(i); ll now = 1; for (auto i : g[0]) pos[i] = now++; for (auto i : g[1]) pos[i] = now++; updateArr(); for (ll i = 1;i <= n;i++) val[i] = Getval(a[i],bit); ll tmp = 0; for (ll i = 1;i <= n;i++){ ll st = lower_bound(val + i,val + n + 1,(1 << bit) - val[i]) - val; ll en = upper_bound(val + i,val + n + 1,(1 << bit + 1) - 1 - val[i]) - val - 1; tmp += en - st + 1; st = lower_bound(val + i,val + n + 1,(1 << bit) + (1 << bit + 1) - val[i]) - val; en = upper_bound(val + i,val + n + 1,(1 << bit + 2) - 2 - val[i]) - val - 1; tmp += en - st + 1; //debug(tmp); //cout<<tmp<<"\n"; } tmp %= 2; //debug(tmp); ans += tmp*(1 << bit); } cout<<ans; } /* stuff you should look for * int overflow, array bounds * special cases (n=1?) * do smth instead of nothing and stay organized * WRITE STUFF DOWN * DON'T GET STUCK ON ONE APPROACH */

Compilation message (stderr)

xorsum.cpp: In function 'int Getval(int, int)':
xorsum.cpp:17:22: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   17 |     return (((1 << i + 1) - 1) & x);
      |                    ~~^~~
xorsum.cpp: In function 'int main()':
xorsum.cpp:49:63: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   49 |             ll en = upper_bound(val + i,val + n + 1,(1 << bit + 1) - 1 - val[i]) - val - 1;
      |                                                           ~~~~^~~
xorsum.cpp:51:73: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   51 |             st = lower_bound(val + i,val + n + 1,(1 << bit) + (1 << bit + 1) - val[i]) - val;
      |                                                                     ~~~~^~~
xorsum.cpp:52:60: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   52 |             en = upper_bound(val + i,val + n + 1,(1 << bit + 2) - 2 - val[i]) - val - 1;
      |                                                        ~~~~^~~
xorsum.cpp:33:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |         freopen(task".INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
xorsum.cpp:34:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...