| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1285867 | minhnguyent546 | Data Transfer (IOI19_transfer) | C++20 | 0 ms | 0 KiB |
std::vector<int> get_attachment(std::vector<int> source) {
int n = (int) source.size();
assert (n == 63 || n == 255);
int x = 0;
for (int i = 0; i < n; ++i) {
x ^= source[i];
}
int sz;
if (n == 63) {
sz = 6;
} else {
sz = 8;
}
vector<int> b(sz + 1);
int cur = x;
int one = 0;
for (int i = 0; i < sz; ++i) {
if ((cur >> i) & 1) {
++one;
b[i] = 1;
}
}
b[sz] = (one & 1 ? 1 : 0);
return b;
}
std::vector<int> retrieve(std::vector<int> data) {
int sz = (int) data.size();
int n, k;
assert(sz == 69 || sz == 263);
if (sz == 69) {
n = 63;
k = 7;
} else {
n = 255;
k = 9;
}
int one = 0;
for (int i = n; i < sz; ++i) {
one += data[i];
}
if (one % 2 == 0) {
// corrupted in N bits
int x = 0;
for (int i = 0; i < sz; ++i) {
if (data[i] == 1) x ^= i;
}
// corrupted position is x;
data[x] ^= 1;
} else {
// corrupted in K bits;
}
return vector<int>(data.begin(), data.begin() + n);
}
