#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
vector <int> get_attachment (vector <int> source) {
int sum = 0;
for (int i = 0; i < (int)source.size(); i++) {
if (source[i] == 1) {
sum += i + 1;
}
}
vector <int> ret;
if (source.size() == 63) {
for (int j = 0; j < 11; j++) {
ret.push_back((sum >> j) & 1);
}
} else {
for (int j = 0; j < 15; j++) {
ret.push_back((sum >> j) & 1);
}
}
int check_sum = 0;
for (auto i : ret) {
check_sum ^= i;
}
ret.push_back(check_sum);
return ret;
}
vector <int> retrieve (vector <int> data) {
int N;
if (data.size() > 200) {
N = 255;
} else {
N = 63;
}
vector <int> rr;
for (int i = 0; i < N; i++) {
rr.push_back(data[i]);
}
int v = 0;
for (int i = N; i + 1 < (int)data.size(); i++) {
v ^= data[i];
}
if (v != data.back()) return rr;
int sum = 0;
for (int i = N; i + 1 < (int)data.size(); i++) {
sum += data[i] * (1 << (i - N));
}
//sum is sum of one positions
int sum2 = 0;
for (int i = 0; i < N; i++) {
if (rr[i] == 1) {
sum2 += i + 1;
}
}
if (sum == sum2) return rr;
int x = abs(sum - sum2);
rr[x - 1] ^= 1;
return rr;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |