# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1185542 | orgiloogii | Combo (IOI18_combo) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int press(string p);
string guess_sequence(int N) {
string p = "";
string ans = "";
for (int i = 0; i < N; ++i) {
p += 'A';
}
int coins = press(p);
char v0;
if (coins) {
ans += 'A';
v0 = 'A';
}
else {
for (int i = 0; i < N; ++i) {
p += 'B';
}
coins = press(p);
if (coins) {
ans += 'B';
v0 = 'B';
}
else {
for (int i = 0; i < N; ++i) {
p += 'X';
}
coins = press(p);
if (coins) {
ans += 'X';
v0 = 'X';
}
else {
ans += 'Y';
v0 = 'Y';
}
}
}
while (ans.size() < N - 1) {
p.clear();
if (v0 == 'A') p = ans + "B" + "X" + ans + "B" + "Y" + ans + "B" + "B" + ans + "X";
if (v0 == 'B') p = ans + "A" + "X" + ans + "A" + "Y" + ans + "A" + "A" + ans + "X";
if (v0 == 'X') p = ans + "A" + "Y" + ans + "A" + "B" + ans + "A" + "A" + ans + "Y";
if (v0 == 'Y') p = ans + "A" + "X" + ans + "A" + "B" + ans + "A" + "A" + ans + "X";
int coins = press(p);
if (coins == 3) {
if (v0 == 'A') ans += 'B';
if (v0 == 'B') ans += 'A';
if (v0 == 'X') ans += 'A';
if (v0 == 'Y') ans += 'A';
}
else if (coins == 2) {
if (v0 == 'A') ans += 'X';
if (v0 == 'B') ans += 'X';
if (v0 == 'X') ans += 'Y';
if (v0 == 'Y') ans += 'X';
}
else {
if (v0 == 'A') ans += 'Y';
if (v0 == 'B') ans += 'Y';
if (v0 == 'X') ans += 'B';
if (v0 == 'Y') ans += 'Y';
}
}
if (v0 == 'A') {
if (press(ans + 'B') == n) {
return ans + 'B';
}
else if (press(ans + 'X') == n) {
return ans + 'X';
}
return ans + 'Y';
}
if (v0 == 'B') {
if (press(ans + 'A') == n) {
return ans + 'A';
}
else if (press(ans + 'X') == n) {
return ans + 'X';
}
return ans + 'Y';
}
if (v0 == 'X') {
if (press(ans + 'B') == n) {
return ans + 'B';
}
else if (press(ans + 'A') == n) {
return ans + 'A';
}
return ans + 'Y';
}
if (v0 == 'Y') {
if (press(ans + 'B') == n) {
return ans + 'B';
}
else if (press(ans + 'X') == n) {
return ans + 'X';
}
return ans + 'A';
}
return ans;
}