Submission #1233388

#TimeUsernameProblemLanguageResultExecution timeMemory
1233388dssfsuper2Data Transfer (IOI19_transfer)C++20
100 / 100
150 ms1728 KiB
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> get_attachment(vector<int> source) {
	vector<int> sequence(((int)source.size()==63? 6:8), 0);
	for(int i = 1;i<=source.size();i++){
		for(int j = 0;j<8;j++){
			if((i>>j)&1){
				sequence[j]^=source[i-1];
			}
		}
	}
	int x = 0;
	for(auto thing:sequence){
		x^=thing;
	}
	sequence.push_back(x);
	return sequence;
}

vector<int> retrieve(vector<int> data) {
	vector<int> totx(8, 0);
	int rs = (data.size()<100 ? 63:255);
	int rsa = (data.size()<100 ? 6:8);
	for(int i = 1;i<=rs;i++){
		for(int j = 0;j<9;j++){
			if((i>>j)&1){
				totx[j]^=data[i-1];
			}
		}
	}
	int x = 0;
	for(int i = rs;i<=rs+rsa;i++){
		x^=data[i];
	}
	if(x==1){
		for(int i = 0;i<rsa+1;i++){
			data.pop_back();
		}
		return data;
	}
	for(int i = rs;i<rs+rsa;i++){
		totx[i-rs]^=data[i];
	}
	vector<int> ans;
	int t= 0;
	for(int i = 0;i<rsa;i++){
		if(totx[i])t|=(1<<i);
	}
	if(t!=0)data[t-1]^=1;
	for(int i  = 0;i<rsa+1;i++){
		data.pop_back();
	}
	return data;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...