Submission #1162902

#TimeUsernameProblemLanguageResultExecution timeMemory
1162902InvMODCombo (IOI18_combo)C++20
100 / 100
8 ms520 KiB
#include<bits/stdc++.h>

//#define name "InvMOD"
#ifndef name
    #include "combo.h"
#endif // name

using namespace std;

string guess_sequence(int n){
    string answer = "";

    // find first candidate

    vector<string> candidate = {"A", "B", "X", "Y"};
    auto del_first_can = [&](string x) -> void{
        for(int i = 0; i < 4; i++){
            if(candidate[i] == x){
                answer += x;
                candidate.erase(candidate.begin() + i);
                break;
            }
        }
    };

    if(press("AB")){
        if(press("A")){
            del_first_can("A");
        }
        else del_first_can("B");
    }
    else if(press("X")) del_first_can("X");
    else del_first_can("Y");

    //cout << "CANDIDATE: " << candidate[0] <<" " << candidate[1] <<" " << candidate[2] << "\n";
    for(int i = 1; i < n - 1; i++){
        // 4 * (n - 2) + 2 * 3 + 1 < 4 * n
        string ask = answer + candidate[0] +
                     answer + (candidate[1] + candidate[2]) +
                     answer + (candidate[1] + candidate[0]) +
                     answer + (candidate[1] + candidate[1]);
        assert((int) ask.size() < 4 * n);
        int val = press(ask);
        if(val == i){
            answer = answer + candidate[2];
        }
        else if(val == i + 1){
            answer = answer + candidate[0];
        }
        else{
            answer = answer + candidate[1];
        }
        //cout << "AFTER ASK: " << i <<" " << answer << "\n";
    }

    if(n > 1){
        if(press(answer + candidate[0]) == n){
            answer = answer + candidate[0];
        }
        else if(press(answer + candidate[1]) == n){
            answer = answer + candidate[1];
        }
        else answer = answer + candidate[2];
    }

    // total operation = (n - 2) + 2 * 2
    return answer;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...