# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
834178 | EntityPlantt | Combo (IOI18_combo) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "combo.h"
using namespace std;
// Makes 2 calls & adds on average 2 letters
inline void checkFor(string &s, char a, char b, char c) {
int r = press(s + a + a + s + a + b + s + b + a), r2;
if (s.size() + 1 == r) {
r2 = press(s + b + b);
if (r2 == s.size() + 1) s = s + b + c;
else if (r2 == s.size()) s = s + a + c;
else s = s + b + b;
}
else if (s.size() == r) s += c;
else {
r2 = press(s + a + a);
if (r2 == s.size()) s = s + b + a;
else if (r2 == s.size() + 1) s = s + a + b;
else s = s + a + a;
}
}
inline void checkFinal(char a, char b, char c) {
if (press(res + a) > res.size()) res += a;
else if (press(res + b) > res.size()) res += b;
else res += c;
}
// Should make N+2 calls
string guess_sequence(int n) {
string s;
// Should make 2 calls
if (press("AB")) { // 1st call
if (press("A")) s = "A"; // 2nd call
else s = "B";
}
else if (press("X")) s = "X"; // 2nd call
else s = "Y";
// Should make N calls
while (s.size() < n - 1) {
if (s[0] == 'A') checkFor(s, 'B', 'X', 'Y');
else if (s[0] == 'B') checkFor(s, 'A', 'X', 'Y');
else if (s[0] == 'X') checkFor(s, 'A', 'B', 'Y');
else if (s[0] == 'Y') checkFor(s, 'A', 'B', 'X');
}
if (s.size() < n) {
if (s[0] == 'A') checkFinal(s, 'B', 'X', 'Y');
else if (s[0] == 'B') checkFinal(s, 'A', 'X', 'Y');
else if (s[0] == 'X') checkFinal(s, 'A', 'B', 'Y');
else if (s[0] == 'Y') checkFinal(s, 'A', 'B', 'X');
}
return s;
}