제출 #1174565

#제출 시각아이디문제언어결과실행 시간메모리
1174565SeungniCombo (IOI18_combo)C++20
100 / 100
7 ms520 KiB
#include <bits/stdc++.h>
#include "combo.h"

using namespace std;

string cand = "ABXY";
string s;

string solve_1() {
    string S;
    string a = "A", b = "B", x = "X";

    int aa = press(a), bb = press(b), xx = press(x);
    if (aa)
        S = a;
    else if (bb)
        S = b;
    else if (xx)
        S = x;
    else
        S = "Y";
    return S;
}

string guess(string prefix)
{    
    string ret = prefix;
    ret += s[0];

    for (int i = 0; i < 3; i++)
    {
        ret += prefix;
        ret += s[1];
        ret += s[i];
    }

    return ret;
}

string guess_sequence(int N)
{    
    if(N == 1) return solve_1();

    string S;
    int a = press({"AB"});
    if(a >= 1) {
        int b = press("AA");
        if(b) S = "A";
        else S = "B";
    }
    else {
        int b = press("XX");
        if(b) S = "X";
        else S = "Y";
    }

    char c = S[0];
    for (int i = 0; i < 4; i++)
    {
        if (cand[i] != c)
            s += cand[i];
    }

    for(int i = 0; i < N - 2; i++) {
        string now = guess(S);
        int v = press(now) - S.length();
        if(v == 2) S += s[1];
        else if(v == 1) S += s[0];
        else S += s[2];
    }

    int idx = 2;

    for(int i = 0; i < 1; i++) {
        for(int j = 0; j < 2; j++) {
            string now = S + s[j];
            int v = press(now);
            if(v > S.length()) {
                idx = j;
                break;
            }
        }
    }

    S += s[idx];

    return S;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...