Submission #1299724

#TimeUsernameProblemLanguageResultExecution timeMemory
1299724cpismayilmmdv985Combo (IOI18_combo)C++20
100 / 100
11 ms508 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;

string guess_sequence(int N) {
    string res = "", query;
    // find first char of string 
    if (!N) return res;
    if (press("AB")) {
        if (press("A")) res += 'A';
        else            res += 'B';
    } else {
        if (press("X")) res += 'X';
        else            res += 'Y';
    }
    if (N == 1) return res;
    if (res[0] == 'A') {
        // ABX
        // ABXABYABBAX
        for (int i = 2; i < N; i++) {
            query = res + "BX" + res + "BY" + res + "BB" + res + "X";
            int val = press(query);
            if (val == int(res.length()) + 2)       res += 'B';
            else if (val == int(res.length()) + 1)  res += 'X';
            else                res += 'Y';
        }
        if (press(res + 'B') == N)       res += 'B';
        else if (press(res + 'X') == N)  res += 'X';
        else                        res += 'Y';
    } else if (res[0] == 'B') {
        for (int i = 2; i < N; i++) {
            query = res + "AX" + res + "AY" + res + "AA" + res + "X";
            int val = press(query);
            if (val == int(res.length() + 2))       res += 'A';
            else if (val == int(res.length()) + 1)  res += 'X';
            else                res += 'Y';
        }
        if (press(res + 'A') == N)       res += 'A';
        else if (press(res + 'X') == N)  res += 'X';
        else                        res += 'Y';
    } else if (res[0] == 'X') {
        for (int i = 2; i < N; i++) {
            query = res + "AB" + res + "AY" + res + "AA" + res + "Y";
            int val = press(query);
            if (val == int(res.length()) + 2)       res += 'A';
            else if (val == int(res.length()) + 1)  res += 'Y';
            else                res += 'B';
        }
        if (press(res + 'A') == N)       res += 'A';
        else if (press(res + 'B') == N)  res += 'B';
        else                        res += 'Y';
    } else {
        for (int i = 2; i < N; i++) {
            query = res + "AB" + res + "AX" + res + "AA" + res + "X";
            int val = press(query);
            if (val == int(res.length()) + 2)       res += 'A';
            else if (val == int(res.length()) + 1)  res += 'X';
            else                res += 'B';
        }
        if (press(res + 'A') == N)       res += 'A';
        else if (press(res + 'B') == N)  res += 'B';
        else                        res += 'X';
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...