Submission #307953

# Submission time Handle Problem Language Result Execution time Memory
307953 2020-09-29T16:14:38 Z urd05 Data Transfer (IOI19_transfer) C++14
0 / 100
7 ms 2668 KB
#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;
}
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 1140 KB WA in grader: wrong source retrieval
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 7 ms 2668 KB WA in grader: wrong source retrieval
2 Halted 0 ms 0 KB -