# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
143489 | tincamatei | Data Transfer (IOI19_transfer) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
public class transfer {
int[] get_attachment(int[] source) {
int N = source.length;
int K;
int[] attach;
if(N == 63)
K = 7;
else
K = 9;
attach = new int[K];
for(int i = 0; i < K - 1; ++i) {
int xorsum = 0;
for(int j = 0; j < N; ++j)
if((j & (1 << i)) != 0)
xorsum = (xorsum ^ source[j]);
attach[i] = xorsum;
}
int totalxorsum = 0;
for(int j = 0; j < N; ++j)
totalxorsum ^= source[j];
attach[K - 1] = totalxorsum;
return attach;
}
int[] retrieve(int[] data) {
int N, K;
int[] rez;
if(data.length == 63 + 7) {
N = 63;
K = 7;
} else {
N = 255;
K = 9;
}
rez = new int[N];
int xorsum = 0;
for(int i = 0; i < N; ++i)
xorsum ^= data[i];
if(data[N + K - 1] != xorsum) {
int broken = 0;
for(int i = 0; i < K - 1; ++i) {
xorsum = 0;
for(int j = 0; j < N; ++j)
if((j & (1 << i)) != 0)
xorsum ^= data[j];
if(xorsum != data[N + i])
broken = (broken ^ (1 << i));
}
data[broken] ^= 1;
}
for(int j = 0; j < N; ++j)
rez[j] = data[j];
return rez;
}
}