| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 679277 | phoebe | Data Transfer (IOI19_transfer) | C++17 | 234 ms | 2668 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.
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source){
source.push_back(0);
vector<int> re;
for (int i = 1; i <= source.size(); i *= 2){
int bruh = 0;
int j = 0;
while (j < source.size()){
for (int k = 0; k < i; k++){
bruh ^= source[j++];
}
j += i;
}
re.push_back(bruh);
}
return re;
}
vector<int> retrieve(vector<int> data){
int sz = (data.size() == 63 + 7 ? 64 : 256);
int x = 0;
vector<int> re;
for (int i = 0; i < sz - 1; i++){
x ^= data[i];
re.push_back(data[i]);
}
if (x == data.back()){
return re;
}
re.push_back(0);
int l = 0, r = sz, left_expected = data[data.size() - 2], idx = data.size() - 2;
for (int k = sz / 2; k >= 1; k /= 2){
// cout << l << ' ' << r << endl;
int mid = (l + r) / 2; // [l, mid), [mid, r)
int left = 0;
for (int i = l; i < mid; i++) left ^= data[i];
if (left == left_expected){ // not in range [l, mid)
// cout << left << endl;
l = mid;
}
else{ // not in range [mid, r)
r = mid;
}
left_expected = data[--idx];
if (k == 1) break;
int j = 0;
while (j < sz){
for (int i = 0; i < k / 2; i++){
if (j >= l && j < r) continue;
left_expected ^= data[j++];
}
j += k / 2;
}
}
// cout << endl << l << ' ' << r << endl;
// for (auto x : re) cout << x; cout << endl;
re[l] ^= 1;
re.pop_back();
return re;
}Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
