Submission #1199408

#TimeUsernameProblemLanguageResultExecution timeMemory
1199408SofiatpcData Transfer (IOI19_transfer)C++20
100 / 100
184 ms1728 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 = 6;
	else b = 8;

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

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

	v.push_back(tot);

	return v;
}

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

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

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

	if(id != 0)
		if(qtd > 1 || tot != data.back())og[id-1] ^= 1;

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