| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1308950 | viobow | Data Transfer (IOI19_transfer) | C++17 | 42 ms | 1736 KiB |
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
#define data __data__
int xor_value(const vector<int> &v) {
int res = 0;
for (int x : v) res ^= x;
return res;
}
int xor_index(const vector<int> &v) {
int res = 0;
for (int i = 0; i < (int)v.size(); i++)
if (v[i]) res ^= (i + 1);
return res;
}
vector<int> get_attachment(vector<int> source) {
int k;
if (source.size() == 63) k = 7;
else k = 9;
vector<int> send(k);
send[0] = xor_value(source);
int source_idx_xor = xor_index(source);
for (int i = 0; i < k - 1; i++)
send[i + 1] = (source_idx_xor >> i & 1);
return send;
}
vector<int> retrieve(vector<int> data) {
int n, k;
if (data.size() == 70) n = 63, k = 7;
else n = 255, k = 9;
vector<int> res(n);
for (int i = 0; i < n; i++)
res[i] = data[i];
int other_xor_idx = 0;
for (int i = 0; i < k - 1; i++)
other_xor_idx |= (data[n + 1 + i] << i);
if (xor_value(res) == data[n]) return res;
else if (xor_index(res) == other_xor_idx) return res;
else res[(other_xor_idx ^ xor_index(res)) - 1] ^= 1;
return res;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
