// 17:31
#include <string>
#include <vector>
#include <functional>
#include <cassert>
#include "combo.h"
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;
if (N == 1) {
return ans;
}
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];
}
}
assert(ans.length() == N - 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;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |