Submission #645092

#TimeUsernameProblemLanguageResultExecution timeMemory
645092NursikCombo (IOI18_combo)C++14
30 / 100
59 ms592 KiB
#include "combo.h"
#include <random>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
const ll maxn = 2e3 + 1;

int used[maxn][4];
vector<char> v = {'A', 'B', 'X', 'Y'};
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
string guess_sequence(int n) {
    string pref = "";
    int get = press("AB");
    if (get > 0){
        get = press("A");
        if (get == 1){
            pref += "A";
        }
        else{
            pref += "B";
        }
    }
    else{
        get = press("X");
        if (get == 1){
            pref += "X";
        }
        else{
            pref += "Y";
        }
    }
    vector<char> v2;
    for (auto it : v){
        if (it != pref[0]){
            v2.pb(it);
        }
    }
    for (int i = pref.size(); i < n;){
        for (int j = 0; j < 3; ++j){
            int k = rng() % (j + 1);
            swap(v2[j], v2[k]);
        }
        int ans = 2;
        for (int j = 0; j < 2; ++j){
            string npref = pref;
            for (int k = 0; k < n; ++k){
                npref += v2[j];
            }
            get = press(npref);
            if (get >= i + 1){
                ans = j;
                int kol = get - (i + 1) + 1;
                for (int k = 1; k <= kol; ++k){
                    pref += v2[j];
                }
                break;
            }
        }
        if (ans == 2){
            pref += v2[ans];
        }
        i = pref.size();
    }
    return pref;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...