# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1276161 | Aviansh | Data Transfer (IOI19_transfer) | C++20 | 46 ms | 1732 KiB |
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source) {
int n = source.size();
int x = 0;
for(int i = 0;i<n;i++){
if(source[i]){
x^=(i+1);
}
}
vector<int>v;
while(x){
v.push_back(x%2);
x/=2;
}
int siz = 7;
if(n==255){
siz=9;
}
while(v.size()!=siz-1){
v.push_back(0);
}
reverse(v.begin(),v.end());
x=0;
for(int i : v){
x^=i;
}
v.push_back(x);
return v;
}
vector<int> retrieve(vector<int> data) {
int n = data.size();
if(n==63+7){
//sub 1
vector<int>ans(63);
for(int i = 0;i<63;i++){
ans[i]=data[i];
}
int x = 0;
for(int i = 0;i<63;i++){
if(data[i]){
x^=(i+1);
}
}
int reqx = 0;
for(int i = 0;i<6;i++){
if(data[n-i-2]){
reqx+=(1<<i);
}
}
if(x==reqx){
//nice no corruption
return ans;
}
int m = 0;
for(int i = 0;i<7;i++){
if((1<<i)&reqx){
m++;
}
}
m%=2;
if(m!=data[n-1]){
return ans;
}
for(int i = 0;i<63;i++){
if((x^(i+1))==reqx){
if(ans[i]){
ans[i]=0;
}
else{
ans[i]=1;
}
return ans;
}
}
assert(0);
}
if(n==255+9){
//sub 1
vector<int>ans(255);
for(int i = 0;i<255;i++){
ans[i]=data[i];
}
int x = 0;
for(int i = 0;i<255;i++){
if(data[i]){
x^=(i+1);
}
}
int reqx = 0;
for(int i = 0;i<8;i++){
if(data[n-i-2]){
reqx+=(1<<i);
}
}
if(x==reqx){
//nice no corruption
return ans;
}
int m = 0;
for(int i = 0;i<8;i++){
if((1<<i)&reqx){
m++;
}
}
m%=2;
if(m!=data[n-1]){
return ans;
}
for(int i = 0;i<255;i++){
if((x^(i+1))==reqx){
if(ans[i]){
ans[i]=0;
}
else{
ans[i]=1;
}
return ans;
}
}
assert(0);
}
assert(0);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |