Submission #921397

#TimeUsernameProblemLanguageResultExecution timeMemory
921397AverageAmogusEnjoyerCombo (IOI18_combo)C++17
97 / 100
13 ms1836 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T> bool cmin(T &i, T j) { return i > j ? i=j,true:false; }
template<class T> bool cmax(T &i, T j) { return i < j ? i=j,true:false; }
int press(string p);
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

string guess_sequence(int n) {
    string res = "";
    vector<string> v = {"A","B","X","Y"};
    shuffle(v.begin(),v.end(),rng);
    for (int i=0;i<=2;i++) {
        if (press(v[i])) {
            res = v[i];
            break;
        }
    }
    if (res == "") {
        res = v[3];
    }
    v.erase(find(v.begin(),v.end(),res));
    for (int i=2;i<n;i++) {
        int r = press(res+v[0]+res+v[1]+v[0]+res+v[1]+v[1]+res+v[1]+v[2]);
        if (r == i-1) {
            res += v[2];
        } else if (r == i) {
            res += v[0];
        } else {
            assert(r == i+1);
            res += v[1];
        }
        assert((int)res.size() == i);
    }
    if ((int)res.size() == n) {
        return res;
    }
    // gotta guess the last one
    shuffle(v.begin(),v.end(),rng);
    if (press(res+v[0]) == n) {
        res += v[0];
    } else if (press(res+v[1]) == n) {
        res += v[1];
    } else {
        res += v[2];
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...