답안 #422924

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
422924 2021-06-10T14:13:31 Z QCFium 코알라 (APIO17_koala) C++14
37 / 100
107 ms 336 KB
#include <bits/stdc++.h>
#include "koala.h"

int minValue(int n, int w) {
	int query[n];
	for (int i = 0; i < n; i++) query[i] = !i;
	int response[n];
	playRound(query, response);
	
	for (int i = 0; i < n; i++) if (response[i] <= query[i]) return i;
	assert(0);
}

std::random_device rnd_dev;
std::mt19937 rnd(rnd_dev() ^ clock());
int maxValue(int n, int w) {
	std::vector<int> cands(n);
	std::iota(cands.begin(), cands.end(), 0);
	std::shuffle(cands.begin(), cands.end(), rnd);
	
	while (cands.size() >= 8) {
		int one = w / cands.size();
		int query[n];
		memset(query, 0, sizeof(query));
		for (auto i : cands) query[i] = one;
		int response[n];
		playRound(query, response);
		
		std::vector<int> next;
		for (auto i : cands) if (response[i] > query[i]) next.push_back(i);
		assert(next.size());
		cands = next;
	}
	return cands[0];
}
int greaterValue(int n, int w) {
	auto go = [&] (int k) {
		int query[n];
		memset(query, 0, sizeof(query));
		query[0] = query[1] = k - 1;
		int response[n];
		playRound(query, response);
		
		if ((query[0] < response[0]) < (query[1] < response[1])) return 1;
		if ((query[0] < response[0]) > (query[1] < response[1])) return 0;
		if (query[0] < response[0]) return -1;
		return -2;
	};
	int t = go(2);
	if (t >= 0) return t;
	if (t == -1) {
		t = go(5);
		if (t >= 0) return t;
		if (t == -1) {
			t = go(9);
			if (t >= 0) return t;
			assert(0);
		} else {
			t = go(3);
			if (t >= 0) return t;
			assert(0);
		}
	} else {
		int query[n];
		for (auto &i : query) i = 1;
		int response[n];
		playRound(query, response);
		int tmp = -1;
		for (int i = 0; i < n; i++) if (response[i] > query[i]) tmp = i;
		
		memset(query, 0, sizeof(query));
		query[tmp] = 1;
		playRound(query, response);
		int r0 = -1;
		for (int i = 0; i < n; i++) if (response[i] <= query[i]) r0 = i;
		
		query[tmp] = 2;
		playRound(query, response);
		int r1 = -1;
		for (int i = 0; i < n; i++) if (r0 != i && response[i] <= query[i]) r1 = i;
		
		if (r0 == 0) return 1;
		if (r0 == 1) return 0;
		if (r1 == 0) return 1;
		if (r1 == 1) return 0;
		assert(0);
	}
}
void allValues(int n, int w, int *p) {
	
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 200 KB Output is correct
2 Correct 6 ms 200 KB Output is correct
3 Correct 5 ms 200 KB Output is correct
4 Correct 4 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 200 KB Output is correct
2 Correct 15 ms 320 KB Output is correct
3 Correct 19 ms 320 KB Output is correct
4 Correct 15 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 100 ms 328 KB Output is correct
2 Correct 98 ms 324 KB Output is correct
3 Correct 100 ms 328 KB Output is correct
4 Correct 97 ms 324 KB Output is correct
5 Correct 107 ms 332 KB Output is correct
6 Correct 103 ms 328 KB Output is correct
7 Correct 98 ms 336 KB Output is correct
8 Correct 99 ms 320 KB Output is correct
9 Correct 99 ms 320 KB Output is correct
10 Correct 103 ms 328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 200 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Output isn't correct
2 Halted 0 ms 0 KB -