#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source) {
int n=source.size();
int val=0;
int x=0;
for(int i=0;i<n;i++) {
if (source[i]==1) {
val+=i+1;
val%=2*(n+1);
x^=1;
}
}
vector<int> ret;
if (n==63) {
for(int i=0;i<7;i++) {
ret.push_back((val%2)^x);
val/=2;
}
}
else {
for(int i=0;i<9;i++) {
ret.push_back((val%2)^x);
val/=2;
}
}
return ret;
}
vector<int> retrieve(vector<int> data) {
vector<int> ret;
if (data.size()==70) {
int x=0;
for(int i=0;i<70;i++) {
x^=data[i];
}
if (x==1) {
for(int i=0;i<63;i++) {
ret.push_back(data[i]);
}
return ret;
}
x=0;
for(int i=0;i<63;i++) {
x^=data[i];
}
if (x==0) {
for(int i=63;i<70;i++) {
data[i]^=1;
}
}
int xval=0;
for(int i=63;i<70;i++) {
xval+=(data[i]<<(i-63));
}
int pos=-1;
int val=0;
for(int i=0;i<63;i++) {
if (data[i]==1) {
val+=i+1;
val%=128;
}
}
for(int i=0;i<63;i++) {
if (data[i]==0) {
if ((val+i+1)%128==xval) {
pos=i;
break;
}
}
else {
if ((xval+i+1)%128==val) {
pos=i;
break;
}
}
}
for(int i=0;i<63;i++) {
ret.push_back(data[i]^(pos==i));
}
}
else {
int x=0;
for(int i=0;i<264;i++) {
x^=data[i];
}
if (x==1) {
for(int i=0;i<255;i++) {
ret.push_back(data[i]);
}
return ret;
}
x=0;
for(int i=0;i<255;i++) {
x^=data[i];
}
if (x==0) {
for(int i=255;i<264;i++) {
data[i]^=1;
}
}
int xval=0;
for(int i=255;i<264;i++) {
xval+=(data[i]<<(i-255));
}
int pos=-1;
int val=0;
for(int i=0;i<255;i++) {
if (data[i]==1) {
val+=i+1;
val%=512;
}
}
for(int i=0;i<255;i++) {
if (data[i]==0) {
if ((val+i+1)%512==xval) {
pos=i;
break;
}
}
else {
if ((xval+i+1)%512==val) {
pos=i;
break;
}
}
}
for(int i=0;i<255;i++) {
ret.push_back(data[i]^(pos==i));
}
}
return ret;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
1140 KB |
WA in grader: wrong source retrieval |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
7 ms |
2668 KB |
WA in grader: wrong source retrieval |
2 |
Halted |
0 ms |
0 KB |
- |