제출 #1296443

#제출 시각아이디문제언어결과실행 시간메모리
1296443Ekber_Ekber콤보 (IOI18_combo)C++20
100 / 100
8 ms480 KiB
#include "combo.h"
#include <bits/stdc++.h>
// #define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;
vector <string> v = {"A", "B", "X", "Y"};

string guess_sequence(int n) {
    int first = -1;
    string p = "";
    // for(int i = 0; i < v.size() - 1; i++){
    //     if(press(v[i]) > 0){
    //         p += v[i];
    //         first = i;
    //         break;
    //     }
    // }
    if (press("AB") > 0) {
        if (press("A") > 0) {
            first = 0;
            p += 'A';
        }
        else {
            first = 1;
            p += 'B';
        }
    }
    else{
        if (press("X") > 0) {
            first = 2;
            p += 'X';
        }
        else {
            first = 3;
            p += 'Y';
        }
    }
    if(p.size() == 0)p += v.back(), first = 3;
    if(p.size() == n)return p;
    vector < string > vv;
    for(int i = 0; i < 4; i++){
        if(i != first)
            vv.push_back(v[i]);
    }
    v = vv;
    while(p.size() < n - 1){
        string cur = "";
        cur += p;
        cur += v[0];
        cur += p;
        cur += v[1];
        cur += v[0];
        cur += p;
        cur += v[1];
        cur += v[2];
        cur += p;
        cur += v[1];
        cur += v[1];
        // cout << cur << endl;
        int sz = press(cur);
        if(sz == p.size()){
            p += v[2];
        }
        else if(sz == p.size() + 1){
            p += v[0];
        }
        else {
            p += v[1];
        }
    }
    for(int i = 0; i < 2; i++){
        string cur = p + v[i];
        if(press(cur) == n){
            return cur;
        }
    }
    string ans = p + v.back();
    // cout << ans << endl;
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...