Submission #1327698

#TimeUsernameProblemLanguageResultExecution timeMemory
1327698horiaboeriu콤보 (IOI18_combo)C++20
100 / 100
8 ms540 KiB
#include <bits/stdc++.h>
#include "combo.h"

using namespace std;
const int NR = 4;
char vp[] = {'A', 'B', 'X', 'Y'};
string v;
string v2;
string guess_sequence(int n) {
    //la inceput gasesc prima litera din 2 queryuri
    //pun ab si dupa pun a sau x in functie de rezultat
    //dupa la fiecare pas raman cu 3 litere care pot fi acolo deci fac un string format din prefixul de lungime p
    //astfel incat in functie de urmatoarea litera sa am raspunsurile p, p + 1 sau p + 2 si sa stiu care este
    //caz particular cand mai e doar o litera si o ghicesc din 2
    //deci fac 2 + 2 + n - 2 = n + 2 query uri
    int x, p, i;
    x = press("AB");
    if (x == 0) {
        x = press("X");
        if (x == 0) {
            v = "Y";
            p = 3;
        } else {
            v = "X";
            p = 2;
        }
    } else {
        x = press("A");
        if (x == 0) {
            v = "B";
            p = 1;
        } else {
            v = "A";
            p = 0;
        }
    }
    if (n == 1) {//caz particular
        return v;
    }
    for (i = 0; i < NR; i++) {
        if (i > p) {
            vp[i - 1] = vp[i];
        }
    }
    //am ramas cu restul in afara de cel care este pe prima pozitie ca stiu ca nu va mai aparea in restul sirului
    for (i = 2; i < n; i++) {
        v2.clear();
        //deci da i - 1 daca este vp[0] sau i daca este vp[1] sau i + 1 daca este vp[2]
        v2 = v + vp[1] + v + vp[2] + vp[0] + v + vp[2] + vp[1] + v + vp[2] + vp[2];
        x = press(v2);
        if (x == i - 1) {
            v += vp[0];
        } else if (x == i) {
            v += vp[1];
        } else {
            v += vp[2];
        }
    }
    x = press(v + vp[0]);
    if (x == n) {
        v += vp[0];
    } else {
        x = press(v + vp[1]);
        if (x == n) {
            v += vp[1];
        } else {
            v += vp[2];
        }
    }
    return v;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...