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"
using namespace std;
vector<int> get_attachment(vector<int> source) {
int n = (int)source.size();
vector<int> ret;
int tmp = 0;
for(int i=0; i<n; i++) tmp ^= source[i];
ret.push_back(tmp);
source.push_back(tmp);
int bits = 6;
if(n == 255) bits = 8;
for(int i=1; i<=bits; i++){
int tmp = 0;
for(int j=0; j<=n; j++){
if((j%(1<<i)) >= (1<<i)/2) tmp ^= source[j];
}
ret.push_back(tmp);
}
return ret;
}
vector<int> retrieve(vector<int> data) {
vector<int> ret;
int n = (int)data.size();
int bits = 6;
if(n == 255+9) bits = 8;
n -= bits;
int faulty = 0;
for(int i=1; i<=bits; i++){
int tmp = 0;
for(int j=0; j<n; j++){
if((j%(1<<i)) >= (1<<i)/2) tmp ^= data[j];
}
if(tmp != data[n+i-1]) faulty += (1<<(i-1));
}
for(int i=0; i<n-1; i++) ret.push_back(data[i]);
if(faulty != n-1){
int tmp = 0;
for(int i=0; i<n-1; i++) tmp ^= data[i];
if(tmp != data[n-1]){
ret[faulty] ^= 1;
}
}
return ret;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |