Submission #1188316

#TimeUsernameProblemLanguageResultExecution timeMemory
1188316hcngSphinx's Riddle (IOI24_sphinx)C++20
12 / 100
38 ms916 KiB
#include "sphinx.h"
#include <bits/stdc++.h>
using namespace std;

#define Query(x) perform_experiment(x)

vector<int> find_colours(int n, vector<int> X, vector<int> Y) {
	vector<int> G(n);
	for (int i = 0; i < n; i++) G[i] = i;
	auto find = [&](const auto &self, int x) -> int {return G[x] == x? x : G[x] = self(self, G[x]);};
	auto check = [&](int M, int i) -> bool {
		set<int> s;
		vector<int> E(n, n);
		for (int j = M; j <= i; j++) {
			s.insert(G[j]);
			E[j] = -1;
		}
		int x = Query(E) + (M == 0 && i == n - 1);
		cerr << s.size() << ' ' << x << endl;
		return x < 1 + s.size();
	};
	for (int i = 1; i < n; i++) {
		int L = 0, R = i;
		while (L < R) {
			int M = L + R + 1 >> 1;
			if (check(M, i)) {
				L = M;
			} else {
				R = M - 1;
			}
		}
		if (check(0, i)) G[i] = find(find, L);
	}
	for (int i = 0; i < n; i++) find(find, i);
	return G;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...