제출 #588397

#제출 시각아이디문제언어결과실행 시간메모리
588397Spade1콤보 (IOI18_combo)C++14
100 / 100
44 ms572 KiB
#include<bits/stdc++.h>
#include "combo.h"
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ld long double
#define st first
#define nd second
#define pb push_back
#define INF INT_MAX
using namespace std;

string btn = "ABXY";
string guess_sequence(int N) {
    char bg;
    if (press("AB"))
        if (press("A")) bg = 'A';
        else bg = 'B';
    else
        if (press("X")) bg = 'X';
        else bg = 'Y';

    if (N == 1) {
        string ans;
        ans += bg;
        return ans;
    }

    string rmn;
    string ans(N, bg);
    for (int i = 0; i < 4; ++i) {
        if (btn[i] == bg) continue;
        rmn += btn[i];
    }

    for (int i = 1; i < N-1; ++i) {
        string guess;
        for (int j = 0; j < 4; ++j) guess += ans;
        guess[i] = rmn[0];
        guess[i+1] = rmn[0];
        guess[i+N] = rmn[0];
        guess[i+N+1] = rmn[1];
        guess[i+2*N] = rmn[0];
        guess[i+2*N+1] = rmn[2];
        guess[i+3*N] = rmn[1];
        int k = press(guess);
        if (k == i) {
            ans[i] = rmn[2];
        }
        else if (k == i+1) {
            ans[i] = rmn[1];
        }
        else {
            ans[i] = rmn[0];
        }
    }

    for (int i = 0; i < 2; ++i) {
        ans[N-1] = rmn[i];
        if (press(ans) == N) {
            return ans;
        }
    }
    ans[N-1] = rmn[2];
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...