#include <bits/stdc++.h>
#include "transfer.h"
using namespace std;
vector<int> get_attachment(vector<int> source) {
int sum = 0, sum2 = 0;
vector<int> attach;
for (int i = 1; i <= source.size(); i++) {
if (source[i - 1]) {
sum ^= i;
}
}
if (source.size() >= 100) for (int i = 0; i < 8; i++) attach.push_back((sum >> i) & 1), sum2 ^= attach.back();
else for (int i = 0; i < 6; i++) attach.push_back((sum >> i) & 1), sum2 ^= attach.back();
attach.push_back(sum2);
return attach;
}
vector<int> retrieve(vector<int> data) {
if (data.size() >= 100) {
int n = data.size() - 9, sum = 0, sum2 = 0, sum3 = 0;
for (int i = 1; i <= n; i++) {
if (data[i - 1]) {
sum ^= i;
}
}
for (int i = n; i < n + 8; i++) {
if (data[i]) {
sum2 += 1 << (i - n);
sum3 ^= 1;
}
}
vector<int> source = data;
for (int i = 0; i < 9; i++) source.pop_back();
if (sum == sum2 || sum3 != data.back()) return source;
else {
int pos = sum ^ sum2;
source[pos - 1] ^= 1;
return source;
}
}
else {
int n = data.size() - 7, sum = 0, sum2 = 0, sum3 = 0;
for (int i = 1; i <= n; i++) {
if (data[i - 1]) {
sum ^= i;
}
}
for (int i = n; i < n + 6; i++) {
if (data[i]) {
sum2 += 1 << (i - n);
sum3 ^= 1;
}
}
vector<int> source = data;
for (int i = 0; i < 7; i++) source.pop_back();
if (sum == sum2 || sum3 != data.back()) return source;
else {
int pos = sum ^ sum2;
source[pos - 1] ^= 1;
return source;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |