# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
215879 | 2020-03-26T12:03:24 Z | wendy_virgo | XOR Sum (info1cup17_xorsum) | C++14 | 1600 ms | 16568 KB |
#include <bits/stdc++.h> using namespace std; template<typename TH> void _dbg(const char* sdbg, TH h) { cerr << sdbg << " = " << h << "\n"; } template<typename TH, typename... TA> void _dbg(const char* sdbg, TH h, TA... t) { while (*sdbg != ',') cerr << *sdbg++; cerr << " = " << h << ","; _dbg(sdbg + 1, t...); } #define db(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #define chkpt cerr << "--- Checkpoint here ---\n"; const int N=1e6+6; int n; int64_t a[N]; void Sub1(){ int ans=0; for(int i=1;i<=n;++i){ for(int j=i;j<=n;++j){ ans^=(a[i]+a[j]); } } cout<<ans<<'\n'; } int Check(int pos){ int res=0; vector<vector<int>> vec(2); for(int i=1;i<=n;++i){ int64_t val=0; for(int j=0;j<pos;++j){ if((a[i]>>j)&1){ val|=1<<j; } } vec[(a[i]>>pos)&1].push_back(val); } for(int i=0;i<2;++i){ sort(begin(vec[i]),end(vec[i])); } int ptr=(int)vec[0].size()-1; for(int i=0;i<vec[0].size();++i){ int64_t val=(1<<pos)-vec[0][i]; while(ptr>=0&&vec[0][ptr]>=val){ ptr--; } if(ptr+1<=i){ res^=(i-(ptr+1)+1)%2; } } ptr=(int)vec[1].size()-1; for(int i=0;i<vec[1].size();++i){ int64_t val=(1<<pos)-vec[1][i]; while(ptr>=0&&vec[1][ptr]>=val){ ptr--; } if(ptr+1<=i){ res^=(i-(ptr+1)+1)%2; } } for(int i=0;i<vec[0].size();++i){ int64_t val=(1<<pos)-vec[0][i]; int lo=0,hi=(int)vec[1].size()-1,pos=-1; while(lo<=hi){ int mi=(lo+hi)/2; if(vec[1][mi]<val){ pos=mi; lo=mi+1; } else{ hi=mi-1; } } if(~pos){ res^=((pos+1)%2); } } return res; } void Sub2(){ int64_t ans=0; for(int i=0;i<=31;++i){ if(Check(i)){ ans+=(int64_t)1<<i; } } cout<<ans; } void Gen(){ srand(time(0)); freopen("info1cup17_xorsum.inp","w",stdout); int n=rand()%5+1; cout<<n<<'\n'; for(int i=1;i<=n;++i){ cout<<rand()%10+1<<' '; } exit(0); } int main() { // Gen(); // freopen("info1cup17_xorsum.inp","r",stdin); // freopen("info1cup17_xorsum.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; } // Sub1(); Sub2(); return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 26 ms | 512 KB | Output is correct |
2 | Correct | 26 ms | 384 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 1685 ms | 16568 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 1685 ms | 16568 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 26 ms | 512 KB | Output is correct |
2 | Correct | 26 ms | 384 KB | Output is correct |
3 | Correct | 597 ms | 2072 KB | Output is correct |
4 | Correct | 583 ms | 3136 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 26 ms | 512 KB | Output is correct |
2 | Correct | 26 ms | 384 KB | Output is correct |
3 | Execution timed out | 1685 ms | 16568 KB | Time limit exceeded |
4 | Halted | 0 ms | 0 KB | - |