Submission #439430

#TimeUsernameProblemLanguageResultExecution timeMemory
439430DecapitatedOCombo (IOI18_combo)C++17
100 / 100
45 ms620 KiB
#include <bits/stdc++.h>
#include "combo.h"

using namespace std;

vector<char> letters = {'A', 'B', 'X', 'Y'};

string guess_sequence(int N) {
    string p = "";
    int coins;

    if (N == 1) {
        for (int i = 0; i < (int) letters.size() - 1; i++) {
            if ((coins = press(p + letters[i])) > 0) {
                p += letters[i];
                break;
            }
        }
        if ((int) p.size() == 0) {
            p += letters[letters.size() - 1];
        }
        return p;
    }


    // Find first character
    coins = press("AB");
    if (coins > 0) {
        if ((coins = press("A")) > 0) {
            p += 'A';
            letters.erase(letters.begin() + 0);
        }
        else {
            p += 'B';
            letters.erase(letters.begin() + 1);
        }
    }
    else {
        if ((coins = press("X")) > 0) {
            p += 'X';
            letters.erase(letters.begin() + 2);
        }
        else {
            p += 'Y';
            letters.erase(letters.begin() + 3);
        }
    }

    // Find characters 2...N-1
    string guess;
    for (int i = 2; i <= N - 1; i++) {
        guess = p + letters[0] + p + letters[1] + letters[0] + p + letters[1] + letters[1] + p + letters[1] + letters[2];
        coins = press(guess) - p.size();
        switch (coins) {
            case 0:
                p += letters[2];
                break;
            case 1:
                p += letters[0];
                break;
            case 2:
                p += letters[1];
                break;
        }
    }

    // Find last character
    for (int i = 0; i < (int) letters.size() - 1; i++) {
        if ((coins = press(p + letters[i])) == N) {
            p += letters[i];
            letters.erase(letters.begin() + i);
            break;
        }
    }
    if ((int) p.size() == N - 1) {
        p += letters[letters.size() - 1];
    }

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