제출 #1184548

#제출 시각아이디문제언어결과실행 시간메모리
1184548acoatoitgsCombo (IOI18_combo)C++20
100 / 100
8 ms524 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;

#define ll long long

int press(string p);

string guess_sequence(int N)
{
    string l = "ABXY";
    if(N == 1)
    {
        ll r = press("AB");
        if(r)
        {
            if(press("A"))  return "A";
            else  return "B";
        }
        else
        {
            if(press("X"))  return "X";
            else  return "Y";
        }
    }
    string ans = "";
    ll r = press("AB");
    if(r)
    {
        if(press("A")) ans = "A";
        else ans = "B";
    }
    else
    {
        if(press("X")) ans = "X";
        else ans = "Y";
    }

    char c = ans[0];

    l.erase(find(l.begin(),l.end(), c));

    while(ans.size() != N-1)
    {
        // cout << "Size: " << ans.size() << " ans: " << ans << "\n";
        string q = ans + l[0];
        for(int i= 0; i < 3; i++)
        {
            q += ans + l[1] + l[i];
        }

        ll r = press(q);
        if(r == ans.size())
            ans += l[2];
        else if(r == ans.size()+1)
            ans += l[0];
        else ans += l[1];
    }
    // cout << "Size: " << ans.size() << " ans: " << ans << "\n";
    
    assert(ans.size() == N-1);

    string st = ans + l[0] + ans + l[1];
    assert(st.size() <= 4*N);

    r = press(st);

    if(r == N)
    {
        if(press(ans + l[0]) == N) ans += l[0];
        else ans += l[1];
    }
    else
    {
        return ans + l[2];
    }

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