#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source){
int l = 9;
if(source.size() == 63) l = 7;
vector<int> ans;
int xor_sum = 0, x = 0;
for(int i=0; i<(int) source.size(); i++){
if(source[i] == 1){
xor_sum ^= (i + 1);
}
}
for(int i=0; i<l-1; i++){
if(xor_sum & (1 << i)){
x ^= 1;
}
}
ans.push_back(x);
// cout << "xor_sum = " << xor_sum << "\n";
for(int i=0; i<l-1; i++){
if(xor_sum & (1 << i)){
ans.push_back(1);
} else ans.push_back(0);
}
return ans;
}
vector<int> retrieve(vector<int> data){
// for(auto x : data) cout << x << " ";
// cout << "\n";
int l = 9;
if(data.size() == 70) l = 7;
vector<int> ans;
int xor_sum = 0, x = 0;
for(int i=data.size()-(l-1); i<data.size(); i++){
if(data[i] == 1){
xor_sum += (1 << (i - data.size() + (l - 1)));
x ^= 1;
}
}
int xor_one = 0;
for(int i=0; i<data.size()-l; i++){
if(data[i] == 1){
xor_one ^= (i + 1);
}
}
// cout << "xor_sum = " << xor_sum << "\n";
// cout << "xor_one = " << xor_one << "\n";
// cout << "x = " << x << ", data[" << data.size() - l << "] = " << data[data.size() - l] << "\n";
if(x != data[data.size() - l]){
for(int i=0; i<data.size()-l; i++){
ans.push_back(data[i]);
}
} else{
for(int i=0; i<data.size()-l; i++){
if((xor_one ^ xor_sum) == (i + 1)){
ans.push_back(1 - data[i]);
} else ans.push_back(data[i]);
}
}
// for(auto x : ans) cout << x << " ";
// cout << "\n";
// cout << (xor_one ^ xor_sum) << "\n";
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |