Submission #592180

# Submission time Handle Problem Language Result Execution time Memory
592180 2022-07-08T17:49:58 Z Elias Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
3 ms 468 KB
#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> p;
vector<set<int>> inside;

#ifndef _DEBUG
#include "messy.h"
#endif

#ifdef _DEBUG

void add_element(string s)
{
	cout << s << "\n";
}

bool check_element(string s)
{
	cout << s << "\n";
	bool b;
	cin >> b;
	return b;
}

void compile_set()
{
	cout << "-------------------\n";
}

#endif

void segAdd(int l, int r, int i)
{
	if (l + 1 == r)
		return;

	int m = l + (r - l) / 2;

	string s(n, '0');

	for (int i = 0; i < n; i++)
		s[i] = ((i >= l && i < r) ? '0' : '1');

	for (int i = l; i < m; i++)
	{
		string out = s;
		out[i] = '1';
		add_element(out);
	}

	segAdd(l, m, i * 2 + 1);
	segAdd(m, r, i * 2 + 2);
}

void segGet(int l, int r, int i)
{
	if (l + 1 == r)
	{
		p[*(inside[i].begin())] = l;
		return;
	}

	string s(n, '0');

	for (int j = 0; j < n; j++)
		if (!inside[i].count(j))
			s[j] = '1';

	for (int val : inside[i])
	{
		string query = s;
		query[val] = '1';

		if (check_element(query))
			inside[i * 2 + 1].insert(val);
		else
			inside[i * 2 + 2].insert(val);
	}

	int m = l + (r - l) / 2;

	segGet(l, m, i * 2 + 1);
	segGet(m, r, i * 2 + 2);
}

vector<int> restore_permutation(int N, int w, int r)
{
	n = N;
	p = vector<int>(n);
	segAdd(0, n, 0);

	inside = vector<set<int>>(n * 4);
	for (int i = 0; i < n; i++)
		inside[0].insert(i);

	compile_set();

	segGet(0, n, 0);

	return p;
}

#ifdef _DEBUG

int main()
{

	int n, w, r;
	cin >> n >> w >> r;

	auto blub = restore_permutation(n, w, r);

	for (int x : blub)
		cout << x << " ";
}

#endif
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 8
2 Correct 1 ms 212 KB n = 8
3 Correct 1 ms 212 KB n = 8
4 Correct 1 ms 212 KB n = 8
5 Correct 0 ms 212 KB n = 8
6 Correct 1 ms 212 KB n = 8
7 Correct 0 ms 212 KB n = 8
8 Correct 1 ms 212 KB n = 8
9 Correct 1 ms 212 KB n = 8
10 Correct 0 ms 212 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 32
2 Correct 1 ms 340 KB n = 32
3 Correct 1 ms 212 KB n = 32
4 Correct 1 ms 300 KB n = 32
5 Correct 1 ms 212 KB n = 32
6 Correct 1 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 1 ms 296 KB n = 32
10 Correct 1 ms 212 KB n = 32
11 Correct 1 ms 296 KB n = 32
12 Correct 1 ms 212 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 212 KB n = 32
15 Correct 1 ms 300 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 32
2 Correct 1 ms 300 KB n = 32
3 Correct 1 ms 212 KB n = 32
4 Correct 1 ms 212 KB n = 32
5 Correct 1 ms 212 KB n = 32
6 Correct 1 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 1 ms 212 KB n = 32
10 Correct 1 ms 296 KB n = 32
11 Correct 1 ms 212 KB n = 32
12 Correct 1 ms 300 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 300 KB n = 32
15 Correct 1 ms 212 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB n = 128
2 Correct 2 ms 468 KB n = 128
3 Correct 2 ms 468 KB n = 128
4 Correct 2 ms 468 KB n = 128
5 Correct 2 ms 468 KB n = 128
6 Correct 2 ms 468 KB n = 128
7 Correct 2 ms 468 KB n = 128
8 Correct 2 ms 468 KB n = 128
9 Correct 2 ms 468 KB n = 128
10 Correct 2 ms 468 KB n = 128
11 Correct 2 ms 468 KB n = 128
12 Correct 2 ms 468 KB n = 128
13 Correct 2 ms 424 KB n = 128
14 Correct 3 ms 468 KB n = 128
15 Correct 2 ms 468 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 1 ms 468 KB n = 128
2 Correct 2 ms 468 KB n = 128
3 Correct 2 ms 468 KB n = 128
4 Correct 2 ms 468 KB n = 128
5 Correct 2 ms 468 KB n = 128
6 Correct 2 ms 432 KB n = 128
7 Correct 2 ms 468 KB n = 128
8 Correct 2 ms 432 KB n = 128
9 Correct 2 ms 468 KB n = 128
10 Correct 2 ms 468 KB n = 128
11 Correct 2 ms 468 KB n = 128
12 Correct 2 ms 468 KB n = 128
13 Correct 2 ms 468 KB n = 128
14 Correct 2 ms 468 KB n = 128
15 Correct 2 ms 432 KB n = 128