Submission #790591

#TimeUsernameProblemLanguageResultExecution timeMemory
790591BoasCombo (IOI18_combo)C++17
100 / 100
426 ms660 KiB
#include "combo.h"
#include <bits/stdc++.h>
#define ALL(x) x.begin(), x.end()
using namespace std;

vector<char> buttons = {'A', 'B', 'X', 'Y'};
string S;

string conv(const string &in)
{
    string ret = in;
    ret = regex_replace(ret, std::regex("r"), S);
    ret = regex_replace(ret, std::regex("a"), string{buttons[0]});
    ret = regex_replace(ret, std::regex("b"), string{buttons[1]});
    ret = regex_replace(ret, std::regex("c"), string{buttons[2]});
    return ret;
}

string guess_sequence(int N)
{
    buttons = {'A', 'B', 'X', 'Y'};
    S = "";
    int r = press("AB");
    if (r == 2)
    {
        S = "AB";
        buttons.erase(buttons.begin());
    }
    else if (r == 1)
    {
        r = press("A");
        if (r == 1)
        {
            S = "A";
            buttons.erase(buttons.begin());
        }
        else
        {
            S = "B";
            buttons.erase(buttons.begin() + 1);
        }
    }
    else
    {
        r = press("X");
        if (r == 1)
        {
            S = "X";
            buttons.erase(buttons.begin() + 2);
        }
        else
        {
            S = "Y";
            buttons.erase(buttons.begin() + 3);
        }
    }
    while (N - S.size() > 1)
    {
        int s = S.size();
        r = press(conv("raarabrba"));
        if (r == s)
        {
            S += conv("c");
        }
        else if (r == s + 1)
        {
            r = press(conv("rbb"));
            if (r == s)
            {
                S += conv("ac");
            }
            else if (r == s + 1)
            {
                S += conv("bc");
            }
            else
            {
                S += conv("bb");
            }
        }
        else
        {
            r = press(conv("raa"));
            if (r == s)
            {
                S += conv("ba");
            }
            else if (r == s + 1)
            {
                S += conv("ab");
            }
            else
            {
                S += conv("aa");
            }
        }
    }
    if (S.size() == N - 1)
    {
        r = press(conv("ra"));
        if (r == N)
        {
            S += conv("a");
        }
        else
        {
            r = press(conv("rb"));
            if (r == N)
            {
                S += conv("b");
            }
            else
            {
                S += conv("c");
            }
        }
    }
    if (S.size() > N)
        S.erase(S.begin() + N, S.end());
    return S;
}

Compilation message (stderr)

combo.cpp: In function 'std::string guess_sequence(int)':
combo.cpp:98:18: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   98 |     if (S.size() == N - 1)
      |         ~~~~~~~~~^~~~~~~~
combo.cpp:118:18: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  118 |     if (S.size() > N)
      |         ~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...