Submission #1176480

#TimeUsernameProblemLanguageResultExecution timeMemory
1176480Zero_OPData Transfer (IOI19_transfer)C++20
0 / 100
5 ms1728 KiB
#include "transfer.h" #include <bits/stdc++.h> using namespace std; std::vector<int> get_attachment(std::vector<int> source) { int N = (int)source.size(); vector<int> send = source; int b = 0; while((1 << b) <= N) ++b; vector<int> parity(b); for(int i = 0; i < N; ++i) if(source[i] == 0){ for(int j = 0; j < b; ++j) if((i+1) >> j & 1) parity[j] ^= 1; } return parity; } std::vector<int> retrieve(std::vector<int> data) { int L = (int)data.size(); //L = N + 32 - __builtin_clz(N) int N = -1, b = -1; for(int i = 1; i < L; ++i){ int nbit = 0; while((1 << nbit) <= i) ++nbit; if(i + nbit == L){ N = i; b = nbit; break; } } assert(N != -1); vector<int> cur(b), fix(data.begin() + N, data.end()); vector<int> receive(data.begin(), data.begin() + N); for(int i = 0; i < N; ++i) if(data[i] == 0){ for(int j = 0; j < b; ++j) if((i+1) >> j & 1) cur[j] ^= 1; } assert((int)cur.size() == (int)fix.size()); int changed = 0; for(int i = 0; i < b; ++i){ if(cur[i] != fix[i]) changed |= (1 << i); } if(changed != 0){ receive[changed-1] ^= 1; } return receive; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...