Submission #1221600

#TimeUsernameProblemLanguageResultExecution timeMemory
1221600thangdz2k7Data Transfer (IOI19_transfer)C++20
0 / 100
7 ms3260 KiB
#include "transfer.h"

#include <bits/stdc++.h>

using namespace std;

vector <int> get_attachment(vector <int> source){
	int N = source.size();
	int K = 6;
	if (N == 255) K = 8;

	vector <int> data = source;
	int all = 0;
	for (int i = 0; i < N; ++ i) 
		all ^= source[i];

	data.push_back(all);

	for (int b = 0; b < K; ++ b){
		int cur = 0;
		for (int i = 0; i < N; ++ i) if ((i >> b) & 1)
			cur ^= source[i];

		data.push_back(cur);
	}

	return data;
}

vector <int> retrieve(vector <int> data){
	int N = data.size();
	int K = 6;
	if (N > 255) N = 255, K = 8;
	else N = 63;

	vector <int> source;
	for (int i = 0; i < N; ++ i) 
		source.push_back(data[i]);

	int all = 0;
	for (int i = 0; i < N; ++ i) 
		all ^= data[i];

	if (all == data[N]) return source;

	int flip = 0;
	for (int b = 0; b < K; ++ b){
		int cur = 0;
		for (int i = 0; i < N; ++ i) if ((i >> b) & 1)
			cur ^= data[i];

		if (cur != data[N + b + 1]) flip |= (1 << b);
	}

	source[flip] ^= 1;
	return source;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...