Submission #428584

#TimeUsernameProblemLanguageResultExecution timeMemory
428584SAADCombo (IOI18_combo)C++17
100 / 100
60 ms576 KiB
#define F first
#define S second
#define rep(i,a,b) for(int i=a;!(a==b&&i!=b)&&((i<=b&&b>=a)||(i>=b&&a>=b));i+=(a<=b?1:-1))
#define pb push_back
#define Fbitl __builtin_ffs
#define bit1 __builtin_popcount
//#include <bits/stdc++.h>
#include <iostream>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <queue>
#include <map>
#include <unordered_map>
#include "combo.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pii> vii;
typedef vector<ll> vl;
typedef vector<vl> vvl;

string sw = " ABXY";
int howto[6000];
int fidx;
string guess_sequence(int N) {
    if (press("ABA")) {
        if (press("B")) fidx = 2;
        else fidx = 1;
    }
    else {
        if (press("X")) fidx = 3;
        else fidx = 4;
    }
    string res = { sw[fidx] };
    string t = res, s = "";
    if (N == 1) return res;
    for (int j = 1; j < N-1; j++) {
        t += ' ';
        int c = 0;
        for (int i = 1; i <= 4; i++) {
            if (i == fidx) continue;
            t[j] = sw[i];
            if (!c) {
                s = t;
                howto[j+1] = i;
            }
            else if (c==1) {
                howto[j+2] = i;
                for (int i1 = 1; i1 <= 4; i1++) {
                    if (i1 == fidx) continue;
                    s += t; s += sw[i1];
                }
            }
            c++;
            if (c == 3) {
                howto[j] = i;
                int a = press(s);
                res += sw[howto[a]];
                t[j] = sw[howto[a]];
            }
        }
    }
    res += ' ';
    for (int i = 1; i <= 4; i++) {
        if (i == fidx) continue; 
        if (i == 4 || (fidx == 4 && i == 3)) {
            res[N-1] = sw[i];
            break;
        }
        res[N - 1] = sw[i];
        if (press(res)==N) return res;
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...