제출 #1248377

#제출 시각아이디문제언어결과실행 시간메모리
1248377fve5콤보 (IOI18_combo)C++17
100 / 100
7 ms484 KiB
#include <bits/stdc++.h>
#include "combo.h"
using namespace std;

string others(char x) {
    switch (x) {
    case 'A': return "BXY";
    case 'B': return "AXY";
    case 'X': return "ABY";
    case 'Y': return "ABX";
    }

    assert(false);
}

string guess(int N, char init) {
    string ans;
    ans.push_back(init);

    if (N == 1)
        return ans;

    string o = others(init);

    for (int i = 1; i < N - 1; i++) {
        int m = press(ans + o[0] + o[0] + ans + o[0] + o[1] + ans + o[0] + o[2] + ans + o[1]);
        
        if (m == i) ans.push_back(o[2]);
        else if (m == i + 1) ans.push_back(o[1]);
        else if (m == i + 2) ans.push_back(o[0]);
        else assert(false);
    }

    if (press(ans + o[0]) == N)
        return ans + o[0];
    if (press(ans + o[1]) == N)
        return ans + o[1];
    return ans + o[2];
}

string guess_sequence(int N) {
    if (press("AB") != 0) {
        if (press("A")) {
            return guess(N, 'A');
        } else {
            return guess(N, 'B');
        }
    } else {
        if (press("X")) {
            return guess(N, 'X');
        } else {
            return guess(N, 'Y');
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...