Submission #1073797

#TimeUsernameProblemLanguageResultExecution timeMemory
10737974QT0RUnscrambling a Messy Bug (IOI16_messy)C++17
100 / 100
2 ms604 KiB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;

vector<int> odp;

void build(int l, int p, int n){
	if (l==p)return;
	string s;
	for (int i = 0; i<n; i++)s+='1';
	for (int i = l; i<=p; i++){
		s[i]='0';
	}
	int md=(l+p)/2;
	for (int i = l; i<=md; i++){
		s[i]='1';
		add_element(s);
		s[i]='0';
	}
	build(l,md,n);
	build(md+1,p,n);
}

void reconstruct(int l, int p, int n, vector<int> podz){
	if (l==p){
		odp[podz[0]]=l;
		return;
	}
	string s;
	for (int i = 0; i<n; i++)s+='1';
	for (auto u : podz)s[u]='0';
	vector<int> lewo,prawo;
	for (auto u : podz){
		s[u]='1';
		if (check_element(s))lewo.push_back(u);
		else prawo.push_back(u);
		s[u]='0';
	}
	reconstruct(l,(l+p)/2,n,lewo);
	reconstruct((l+p)/2+1,p,n,prawo);
}

vector<int> restore_permutation(int n, int w, int r){
	odp.resize(n);
	build(0,n-1,n);
	compile_set();
	vector<int> wszystko;
	for (int i = 0; i<n; i++)wszystko.push_back(i);
	reconstruct(0,n-1,n,wszystko);
	return odp;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...