# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1191527 | 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;
}
#endif
string guess_sequence(int n) {
string a;
string all = "ABXY";
string cur = "ABXY";
{ // Find first
int _01 = press("AB");
if (_01) {
int _0 = press(string(1, all[0]));
if (_0) a.push_back(all[0]), cur.erase(cur.begin()+0);
else a.push_back(all[1]), cur.erase(cur.begin()+1);
}
else {
int _2 = press(string(1, all[2]));
if (_2) a.push_back(all[2]), cur.erase(cur.begin()+2);
else a.push_back(all[3]), cur.erase(cur.begin()+3);
}
}
{ // Find middle
for (int i = 2; i <= n-1; i++) {
string guess = a;
guess += cur[0];
for (int j = 0; j < 3; j++) guess += a + cur[1] + cur[j];
int score = press(guess);
if (score == i) a += cur[0];
else if (score == i+1) a += cur[1];
else a += cur[2];
}
}
{ // Find last
string guess = a + cur[0] + a + cur[1];
int _01 = press(guess);
if (_01 == n-1) a += cur[2];
else {
guess = a + cur[0];
int _0 = press(guess);
if (_0) a += cur[0];
else a += cur[1];
}
}
return a;
}
#ifdef LOCAL
int main() {
int n; cin >> n;
cout << guess_sequence(n) << endl;
return 0;
}
#endif