Submission #1221617

#TimeUsernameProblemLanguageResultExecution timeMemory
1221617thangdz2k7Data Transfer (IOI19_transfer)C++20
0 / 100
5 ms1728 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;
	int all = 0;
	for (int i = 0; i < N; ++ i) 
		all ^= source[i];

	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);
	}

	data.push_back(all);

	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[K + 1 + i]);

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

	if (all == data[K]) 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[K + 1 + i];

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

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