Submission #103992

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

#define form2(i, a, b) for (int i = (a); i < (b); ++i)
#define ford2(i, a, b) for (int i = (a-1); i >= b; --i)
#define form(i, n) form2(i, 0, n)
#define ford(i, n) ford2(i, n, 0)

#define chmax(x, v) x = max(x, (v))
#define chmin(x, v) x = min(x, (v))
#define fi first
#define se second

const int INF = (int)(1e9);

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;

int nbElem, nbAdd, nbCheck;

pii st1()
{
	string s = "00000000";
	add_element(s);
	form(i, nbElem) {
		s[i] = '1';
		add_element(s);
	}
	compile_set();
	s = "00000000";
	int rf = -1;
	form(i, nbElem) {
		s[i] = '1';
		if (! check_element(s)) { s[i] = '0'; rf = i; break; }
	}
	if (rf == -1) return {-1,-1};

	form2(i, rf+1, nbElem) {
		s[i] = '1';
		if (check_element(s)) { return {rf,i}; }
		s[i] = '0';
	}
	return {-1,-1};
}

vector<int> st2()
{
	vector<int> perm(nbElem);
	string s;
	form(i, nbElem) s.push_back('0');
	string curVu = s;

	form(i, nbElem) {
		s[i] = '1';
		add_element(s);
	}
	compile_set();

	form(cherche, nbElem) {
		s = curVu;
		form(teste, nbElem) {
			if (curVu[teste] == '1') continue;
			s[teste] = '1';
			if (check_element(s)) { perm[teste] = cherche; curVu[teste] = '1'; break; }
			s[teste] = '0';
		}
	}
	return perm;
}


vector<int> restore_permutation(int n, int w, int r) {
	nbElem = n;
	nbAdd = w;
	nbCheck = r;

	vector<int> p(n);
	form(i, n) p[i] = i;

	if (n == 8) {
		pii sw = st1();
		if (sw.fi != -1) {
			p[sw.fi] = sw.se;
			p[sw.se] = sw.fi;
		}
	}

	if (n == 32 && w == 320 && r == 1024) {
		return st2();
	}

	return p;

}
#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...