Submission #726936

#TimeUsernameProblemLanguageResultExecution timeMemory
726936NeltCombo (IOI18_combo)C++17
100 / 100
34 ms520 KiB
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,fma")

#include "combo.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

/* DEFINES */
#define S second
#define F first
#define ll long long
#define ull unsigned long long
#define ld long double
#define npos ULLONG_MAX
#define INF LLONG_MAX
#define vv(a) vector<a>
#define pp(a, b) pair<a, b>
#define pq(a) priority_queue<a>
#define qq(a) queue<a>
#define ss(a) set<a>
#define mm(a, b) map<a, b>
#define ump(a, b) unordered_map<a, b>
#define sync                      \
    ios_base::sync_with_stdio(0); \
    cin.tie(0);                   \
    cout.tie(0);
#define elif else if
#define endl "\n"
#define allc(a) begin(a), end(a)
#define all(a) a, a + sizeof(a) / sizeof(a[0])
#define pb push_back
#define logi(a) __lg(a)
#define sqrt(a) sqrtl(a)
#define mpr make_pair
#define ins insert
using namespace std;
using namespace __gnu_pbds;
using namespace __cxx11;
typedef char chr;
typedef basic_string<chr> str;
template <typename T, typename key = less<T>>
using ordered_set = tree<T, null_type, key, rb_tree_tag, tree_order_statistics_node_update>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

str guess_sequence(int n)
{
    
    str p;
    str dx = "AXYB";
    if (press("AB"))
    {
        if (press("A"))
          dx = "XYB", p += 'A';
        else
          dx = "AXY", p += 'B';
    }
    else
    {
      if (press("X"))
        dx = "AYB", p += 'X';
      else
        dx = "AXB", p += 'Y';
    }
    if (n == 1)
        return p;
    str q;
    ll ans;
    for (ll i = 1; i < n - 1; i++)
    {
        q = "";
        for (ll i = 0; i < 3; i++)
            q += p, q += dx[0], q += dx[i];
        q += p;
        q += dx[1];
        ans = press(q);
        if (ans == i)
            p.pb(dx[2]);
        elif (ans == i + 1)
            p.pb(dx[1]);
        else
            p.pb(dx[0]);
    }
    if (n > 1)
    for (ll i = 0; i < 2; i++)
    {
        p.pb(dx[i]);
        if (press(p) == n)
            break;
        p.pop_back();
    }
    if (p.size() == n - 1)
        p.pb(dx.back());
    return p;
}

Compilation message (stderr)

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