# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1172490 | versesrev | Combo (IOI18_combo) | C++20 | 0 ms | 0 KiB |
// 17:31
#include <string>
#include <vector>
#include <functional>
#include <cassert>
std::string guess_sequence (int N) {
std::vector<char> cs{'a', 'b', 'x', 'y'};
char start = std::invoke([&]{
int v1 = press("ab");
if (v1 == 1) {
if (press("a") == 1) return 'a';
else return 'b';
}
else {
if (press("x") == 1) return 'x';
else return 'y';
}
});
std::erase(cs, start);
std::string ans;
ans += start;
for (int i = 1; i < N - 1; ++i) {
std::string query = ans + cs[0];
query += ans + cs[1] + cs[0];
query += ans + cs[1] + cs[1];
query += ans + cs[1] + cs[2];
int val = press(query);
if (val == ans.length()) {
ans += cs[2];
}
else if (val == ans.length() + 1) {
ans += cs[0];
}
else {
assert(val == ans.length() + 2);
ans += cs[1];
}
}
std::string query = ans + cs[0] + ans + cs[1];
if (press(query) == N - 1) {
ans += cs[2];
}
else if(press(ans + cs[0]) == N) {
ans += cs[0];
}
else {
ans += cs[1];
}
return ans;
}