제출 #83810

#제출 시각아이디문제언어결과실행 시간메모리
83810AdrienVannson콤보 (IOI18_combo)C++17
30 / 100
87 ms448 KiB
#include <bits/stdc++.h>

#include "combo.h"

using namespace std;

const int NB_MAX_CARACTERES = 2000+1;

string res = "";
bool estPossible[NB_MAX_CARACTERES][3];


string guess_sequence (int nbElements)
{
    fill(*estPossible, *estPossible+NB_MAX_CARACTERES*3, true);

    if (press("AB") > 0) {
        res += press("A") ? 'A' : 'B';
    }
    else {
        res += press("X") ? 'X' : 'Y';
    }

    if (nbElements == 1) {
        return res;
    }

    string caracteres;
    for (char c : "ABXY") {
        if (c != res[0]) {
            caracteres.push_back(c);
        }
    }

    while ((int)res.size() < nbElements) {

        string requete = res;

        while ((int)requete.size() < nbElements) {
            for (int iCaractere=0; true; iCaractere++) {
                if (estPossible[requete.size()][iCaractere]) {
                    requete += caracteres[iCaractere];
                    break;
                }
            }
        }

        const int reponse = press(requete);

        while ((int)res.size() < reponse) {
            res += requete[res.size()];
        }

        if ((int)res.size() < nbElements) {
            const int iCaractere = distance(caracteres.begin(), find(caracteres.begin(), caracteres.end(), requete[res.size()]));

            estPossible[res.size()][iCaractere] = false;
        }
    }

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