Submission #1266922

#TimeUsernameProblemLanguageResultExecution timeMemory
1266922haithamcoderData Transfer (IOI19_transfer)C++20
0 / 100
7 ms3260 KiB
#include "transfer.h"
typedef int ll;
#include<bits/stdc++.h>
using namespace std;


std::vector<int> get_attachment(std::vector<int> source) {
	ll n = source.size();
	ll cnt[] = {0, 0};

	for (auto x : source) {
		cnt[x]++;
	}

	ll msb = 31 - __builtin_clz(n);
	vector<ll> res(n + msb + 1);

	ll t = n;
	for (ll i = msb; i >= 0; i--) {
		if ((1 << i) <= t) {
			t -= (1 << i);
			res[msb - i] = 1;
		}
	}

	for (ll i = 0; i < n; i++) {
		res[i + msb + 1] = source[i];
	}

	return res;
}

std::vector<int> retrieve(std::vector<int> data) {
	ll n;
	if (data.size() <= 255) n = 63;
	else n = 255;

	vector<ll> res(n);

	ll cnt[] = {0, 0};
	for (ll i = 0; i < n; i++) {
		cnt[data[i]]++;
		res[i] = data[i];
	}

	ll count = 0;
	ll msb = 31 - __builtin_clz(n);

	for (ll i = 0; i <= msb; i++) {
		if (data[n + i]) {
			count += (1 << (msb - i));
		}
	}

	vector<ll> rev(n);
	for (ll i = 0; i < n; i++) {
		rev[i] = data[n + msb + 1 + i];
	}

	if (count == cnt[1]) return res;
	else return rev;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...