제출 #560618

#제출 시각아이디문제언어결과실행 시간메모리
560618MilosMilutinovicData Transfer (IOI19_transfer)C++14
88 / 100
299 ms2492 KiB
#include "transfer.h" #include <bits/stdc++.h> using namespace std; vector<int> get_attachment(vector<int> source) { int K = 9; if (source.size() == 63) { K = 8; } int n = source.size(); vector<int> ret(K); for (int i = 0; i < n; i++) { for (int j = 0; j < K - 1; j++) { if ((i + 1) >> j & 1) { ret[j] ^= source[i]; } } ret[K - 1] ^= source[i]; } return ret; } vector<int> retrieve(vector<int> data) { int K = 9; if (data.size() < 255) { K = 8; } int n = data.size(); int f = 0; for (int i = 0; i < n - K; i++) { f ^= data[i]; } vector<int> ans(n - K); for (int i = 0; i < n - K; i++) { ans[i] = data[i]; } if (f == data.back()) { return ans; } vector<int> r(8); for (int i = 0; i < n - K; i++) { for (int j = 0; j < K - 1; j++) { if ((i + 1) >> j & 1) { r[j] ^= data[i]; } } } int pos = 0; for (int i = 0; i < K - 1; i++) { if (r[i] != data[n - K + i]) { pos += (1 << i); } } if (pos != 0) { pos--; ans[pos] ^= 1; } return ans; } /* 5 0 011001010110110110100111110011010111111111111000101011100101001 7 011001010110110110100111110011010111111111111000101011100101001 62 011001010110110110100111110011010111111111111000101011100101001 63 011001010110110110100111110011010111111111111000101011100101001 -1 011001010110110110100111110011010111111111111000101011100101001 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...