# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1191536 | vidux | 콤보 (IOI18_combo) | C++17 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define LOCAL
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
#ifdef LOCAL
int press(string p) {
cout << p << ": ";
int x; cin >> x;
return x;
}
#else
#include "combo.h"
#endif
string guess_sequence(int n) {
string a;
string all = "ABXY";
string cur = "ABXY";
{ // Find first
int ab = press("AB");
if (ab) {
int x = press(string(1, 'A'));
if (x) a = 'A', cur = "BXY";
else a = 'B', cur = "AXY";
}
else {
int x = press(string(1, 'X'));
if (x) a = 'X', cur = "ABY";
else a = 'Y', cur = "ABX";
}
}
if (n == 1) return a;
{ // Find middle
for (int i = 1; i < n-1; i++) {
string guess = a+cur[0] + a+cur[1]+cur[0] + a+cur[1]+cur[1] + a+cur[1]+cur[2];
int score = press(guess);
if (score == i+1) a += cur[0];
if (score == i+2) a += cur[1];
if (score == i+0) a += cur[2];
}
}
{ // Find last
if (press(a + cur[0]) == n) a += cur[0];
else if (press(a + cur[1]) == n) a += cur[1];
else a += cur[2];
}
return a;
}
#ifdef LOCAL
int main() {
int n; cin >> n;
cout << guess_sequence(n) << endl;
return 0;
}
#endif