Submission #1233456

#TimeUsernameProblemLanguageResultExecution timeMemory
1233456badge881Data Transfer (IOI19_transfer)C++20
88 / 100
72 ms1792 KiB
#include "transfer.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> get_attachment(vector<int> source)
{
	int xr = 0, cnt = 0;
	for (int i = 0; i < source.size(); i++)
		if (source[i] == 0)
			xr ^= (i + 1),
			cnt++;
	vector<int> control;
	for (int i = 7; i >= 0; i--)
		if (xr & (1 << i))
			control.push_back(1);
		else
			control.push_back(0);

	control.push_back(cnt % 2);
	return control;
}

vector<int> retrieve(vector<int> data)
{
	int xr = 0, cnt = 0;
	for (int i = 0; i < data.size() - 9; i++)
		if (data[i] == 0)
			xr ^= (i + 1),
				cnt++;
	vector<int> ans;
	for (int i = 0; i < data.size() - 9; i++)
		ans.push_back(data[i]);

	int parity = data[data.size() - 1], reported_xor = 0;
	for (int i = data.size() - 9; i < data.size() - 1; i++)
		reported_xor = (2 * reported_xor) + data[i];

	if (xr == reported_xor || cnt % 2 == parity)
		return ans;

	ans[(xr ^ reported_xor) - 1] = 1 - ans[(xr ^ reported_xor) - 1];
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...