제출 #800082

#제출 시각아이디문제언어결과실행 시간메모리
800082Josia콤보 (IOI18_combo)C++17
97 / 100
30 ms472 KiB
#include "combo.h"

#include <bits/stdc++.h>

using namespace std;


string guess_sequence(int N) {
    char start = '?';

    if (press("AB")) {
        if (press("A")) start='A';
        else start='B';
    }
    else {
        if (press("X")) start='X';
        else start='Y';
    }

    if (N == 1) return {start};

    vector<char> trans;

    for (char i: {'A', 'B', 'X', 'Y'}) if (i != start) trans.push_back(i);



    string res = {start};

    for (int i = 1; i<N-1; i++) {
        string p = "";
        p.append(res);
        p.push_back(trans[0]);
        p.push_back(trans[0]);

        p.append(res);
        p.push_back(trans[0]);
        p.push_back(trans[1]);

        p.append(res);
        p.push_back(trans[0]);
        p.push_back(trans[2]);

        p.append(res);
        p.push_back(trans[1]);


        int coins = press(p);

        if (coins == (int)res.size()) {
            res.push_back(trans[2]);
        }
        if (coins == (int)res.size()+1) {
            res.push_back(trans[1]);
        }
        if (coins == (int)res.size()+2) {
            res.push_back(trans[0]);
        }
    }

    assert((int)res.size() == N-1);
    assert(press(res) == (int)res.size());

    string p = "";

    p.append(res);
    p.push_back(trans[0]);


    if (press(p) == N) {
        res.push_back(trans[0]);
    } else {
        p.pop_back();
        p.push_back(trans[1]);
        if (press(p) == N) {
            res.push_back(trans[1]);
        }
        else res.push_back(trans[2]);
    }

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