Submission #111494

#TimeUsernameProblemLanguageResultExecution timeMemory
111494diamond_dukeKoala Game (APIO17_koala)C++11
73 / 100
82 ms512 KiB
#include "koala.h"
#include <algorithm>
#include <vector>
std::vector<bool> query(const std::vector<int> &vec)
{
	static int B[105], R[105];
	int n = vec.size();
	for (int i = 0; i < n; i++)
		B[i] = vec[i];
	playRound(B, R);
	std::vector<bool> res(n);
	for (int i = 0; i < n; i++)
		res[i] = R[i] > B[i];
	return res;
}
int minValue(int n, int m)
{
	std::vector<int> vec(n);
	vec[0] = 1;
	auto res = query(vec);
	for (int i = 0; i < n; i++)
	{
		if (!res[i])
			return i;
	}
	return -1;
}
int maxValue(int n, int m)
{
	std::vector<bool> in(n, true);
	int cnt = n;
	while (cnt > 1)
	{
		int w = m / cnt;
		std::vector<int> vec(n);
		for (int i = 0; i < n; i++)
			vec[i] = in[i] ? w : 0;
		auto res = query(vec);
		cnt = 0;
		for (int i = 0; i < n; i++)
		{
			in[i] = in[i] & res[i];
			cnt += in[i];
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (in[i])
			return i;
	}
	return -1;
}
bool comp(int n, int x, int y)
{
	std::vector<int> vec(n);
	vec[x] = vec[y] = 4;
	auto res = query(vec);
	if (res[x] != res[y])
		return res[y];
	if (res[x])
	{
		vec[x] = vec[y] = 8;
		return query(vec)[y];
	}
	vec[x] = vec[y] = 2;
	res = query(vec);
	if (res[x] != res[y])
		return res[y];
	vec[x] = vec[y] = 1;
	return query(vec)[y];
}
int greaterValue(int n, int m)
{
	return comp(n, 0, 1);
}
void allValues(int n, int m, int *arr)
{
	std::vector<int> seq(n);
	for (int i = 0; i < n; i++)
		seq[i] = i;
	std::stable_sort(seq.begin(), seq.end(), [&] (int x, int y)
	{
		if (n == m)
			return comp(n, x, y);
		std::vector<int> vec(n, 0);
		vec[x] = vec[y] = n;
		return (bool)query(vec)[y];
	});
	for (int i = 0; i < n; i++)
		arr[seq[i]] = i + 1;
}
#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...