Submission #1176481

#TimeUsernameProblemLanguageResultExecution timeMemory
1176481Zero_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+1)) ++b; vector<int> parity(b); // cout << b << '\n'; 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; } // for(auto it : send) cout << it; cout << '\n'; return parity; } std::vector<int> retrieve(std::vector<int> data) { int L = (int)data.size(); //L = N + 32 - __builtin_clz(N) // for(auto it : data) cout << it; cout << '\n'; int N = -1, b = -1; for(int i = 1; i < L; ++i){ int nbit = 0; while((1 << nbit) <= i+1) ++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...