제출 #1272263

#제출 시각아이디문제언어결과실행 시간메모리
1272263jungle15콤보 (IOI18_combo)C++17
0 / 100
1 ms400 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

#define Jungle "IOI18_combo"
#define getbit(x, i) (((x) >> (i)) & 1)
#define MASK(i) (1 << (i))
#define cntbit __builtin_popcount
#define MULTEST \
    int nq;     \
    cin >> nq;  \
    while (nq--)

template <typename t>
void chkmin(t &a, t b)
{
    if (a > b)
        a = b;
}

template <typename t>
void chkmax(t &a, t b)
{
    if (a < b)
        a = b;
}

string guess_sequence(int n)
{
    string ans = "";
    if (press("AB") > 0)
    {
        if (press("A") == 1)
            ans += 'A';
        else
            ans += 'B';
    }
    else
    {
        if (press("X") == 1)
            ans += 'X';
        else
            ans += 'Y';
    }
    char a, b, c;
    if (ans[0] == 'A')
        a = 'B', b = 'X', c = 'Y';
    else if (ans[0] == 'B')
        a = 'A', b = 'X', c = 'Y';
    else if (ans[0] == 'X')
        a = 'B', b = 'A', c = 'Y';
    else
        a = 'B', b = 'X', c = 'A';
    for (int i = 1; i < n; i++)
    {
        string q;
        q.reserve(ans.size() * 4 + 10);
        q += ans;
        q.push_back(a);
        q.push_back(a);
        q += ans;
        q.push_back(a);
        q.push_back(b);
        q += ans;
        q.push_back(b);
        q.push_back(c);
        int h = press(q) - (int)ans.size();
        if (h == 0)
        {
            ans.push_back(c);
            continue;
        }
        if (h == 2)
        {
            int j = press(ans + string(2, a)) - (int)ans.size();
            if (j == 2)
            {
                ans.push_back(a);
                ans.push_back(a);
                ++i;
            }
            else if (j == 1)
            {
                ans.push_back(a);
                ans.push_back(b);
                ++i;
            }
            else
            {
                ans.push_back(b);
                ans.push_back(c);
                ++i;
            }
            continue;
        }
        int j = press(ans + string(2, b)) - (int)ans.size();
        if (j == 0)
        {
            ans.push_back(c);
            continue;
        }
        if (j == 1)
        {
            int k = press(ans + string(2, a)) - (int)ans.size();
            if (k == 2)
            {
                ans.push_back(a);
                ans.push_back(a);
                ++i;
            }
            else if (k == 1)
            {
                ans.push_back(a);
                ans.push_back(b);
                ++i;
            }
            else
            {
                ans.push_back(b);
                ans.push_back(b);
                ++i;
            }
            continue;
        }
        if (j == 2)
        {
            ans.push_back(b);
            ans.push_back(b);
            ++i;
            continue;
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...