제출 #548874

#제출 시각아이디문제언어결과실행 시간메모리
548874Zanite콤보 (IOI18_combo)C++17
100 / 100
35 ms596 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;

char button[] = {'A', 'B', 'X', 'Y'};
int start, n1, n2, n3;

string guess_sequence(int N) {
	string ans = "";

	// find character #1
	if (press("AB")) {
		if (press("A")) {
			ans.push_back('A');
			start = 0;
		} else {
			ans.push_back('B');
			start = 1;
		}
	} else {
		if (press("X")) {
			ans.push_back('X');
			start = 2;
		} else {
			ans.push_back('Y');
			start = 3;
		}
	}
	n1 = (start + 1) % 4;
	n2 = (start + 2) % 4;
	n3 = (start + 3) % 4;

  //cout << ans << '\n';

	// find character #[2..N-1]
	for (int i = 2; i < N; i++) {
		string query = ans;
		query.push_back(button[n1]);

		query += ans;
		query.push_back(button[n2]);
		query.push_back(button[n1]);

		query += ans;
		query.push_back(button[n2]);
		query.push_back(button[n2]);

		query += ans;
		query.push_back(button[n2]);
		query.push_back(button[n3]);

		int coins = press(query);
		if (coins == i+1) {
			ans.push_back(button[n2]);
		} else if (coins == i) {
			ans.push_back(button[n1]);
		} else {
			ans.push_back(button[n3]);
		}

    //cout << ans << '\n';
	}

	// find character #N
	if (N != 1) {
		string query = ans;
		query.push_back(button[n1]);
		query += ans;
		query.push_back(button[n2]);

		if (press(query) == N) {
			query = ans;
			query.push_back(button[n1]);
			if (press(query) == N) {
				ans.push_back(button[n1]);
			} else {
				ans.push_back(button[n2]);
			}
		} else {
			ans.push_back(button[n3]);
		}

    //cout << ans << '\n';
	}

	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...