| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1364018 | nerrrmin | Data Transfer (IOI19_transfer) | C++20 | 102 ms | 1724 KiB |
#include "transfer.h"
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
int get_xor(int bit, vector < int > v)
{
int res = 0;
for (int i = 0; i < v.size(); ++ i)
{
int has = ((1 << bit) & i);
if(!has)res = (res ^ v[i]);
}
return res;
}
std::vector<int> get_attachment(std::vector<int> source) {
int n, k;
vector < int > v = source;
std::vector<int> res;
n = (int)source.size();
//assert(n == 63);
if(n == 63)k = 6;
else k = 8;
for (int bit = 0; bit < k; ++ bit)
{
int x = get_xor(bit, v);
res.pb(x);
}
int total = 0;
for (int i = 0; i < (int)res.size(); ++ i)
total = (total ^ res[i]);
res.pb(total);
return res;
}
std::vector<int> retrieve(std::vector<int> data)
{
int n, k;
vector < int > ans;
int sz = data.size();
if(sz == 255 + 9)n = 255;
else n = 63;
//assert(sz == 63 + 7);
int total = 0;
for (int i = 0; i < sz-1; ++ i)
{
if(i < n)ans.pb(data[i]);
if(i >= n)total = (total ^ data[i]);
}
if(n == 255)k = 8;
else k = 6;
//
int problem = 0, j = n;
for (int bit = 0; bit < k; ++ bit)
{
int last = data[j];
int curr = get_xor(bit, ans);
if(last == curr)
{
problem += (1 << bit);
}
j ++;
}
//cout << "PROBLEM IS " << problem << endl;
if(problem < 0 || problem >= n)return ans;
if(data.back() != total)return ans;
ans[problem] = 1 - ans[problem];
return ans;
}
Compilation message (stderr)
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
