Submission #1199403

#TimeUsernameProblemLanguageResultExecution timeMemory
1199403SofiatpcData Transfer (IOI19_transfer)C++20
80 / 100
176 ms1732 KiB
#include "transfer.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> get_attachment(vector<int> source) {
	int n = source.size(), b;
	if(n == 63)b = 12;
	else b = 16;

	vector<int> v; 
	for(int i = 0; i < b; i++)v.push_back(0);

	for(int i = 1; i <= n; i++){
		for(int j = 0; j < b/2; j++){
			if(i & (1<<j))v[j] ^= source[i-1];
			else{v[j+b/2] ^= source[i-1]; }
		}
	}
	
	return v;
}

vector<int> retrieve(vector<int> data) {
	int n,b;
	if(data.size() >= 255){ n = 255; b = 16; }
	else{ n = 63; b= 12; }
	
	vector<int> og, x;
	for(int i = 0; i < b; i++)x.push_back(0);

	for(int i = 1; i <= n; i++){
		for(int j = 0; j < b/2; j++){
			if(i & (1<<j))x[j] ^= data[i-1];
			else{x[j+b/2] ^= data[i-1]; }
		}
		og.push_back(data[i-1]);
	}

	int id = 0, l = 0;
	for(int i = 0; i < b/2; i++){
		if(x[i] != data[n+i]){
			id += (1<<i);
			l = i;
		}else if(x[b/2+i] == data[n+b/2+i]){
			id = n+i+1;
			break;
		}
	}

	if(id != 0)og[id-1] ^= 1;

	return og;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...