Submission #1284759

#TimeUsernameProblemLanguageResultExecution timeMemory
1284759hynmjCombo (IOI18_combo)C++20
100 / 100
8 ms480 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;
const string init = "ABXY";
vector<string> ist = {"B", "CA", "CB", "CC"};
std::string guess_sequence(int n)
{
   string s;
   for (int i = 0; i < 2; i++)
   {
      s += init[i];
   }
   int k = press(s);
   if (k == 0)
   {
      s = init[2];
      k = press(s);
      if (k == 0)
      {
         s = init[3];
      }
   }
   else
   {
      s = init[0];
      k = press(s);
      if (k == 0)
      {
         s = init[1];
      }
   }
   if (n == 1)
      return s;
   string t;
   for (int i = 0; i < 4; i++)
   {
      if (init[i] == s[0])
         continue;
      t += init[i];
   }
   vector<string> st = ist;
   for (int i = 0; i < 4; i++)
   {
      for (int j = 0; j < ((int)st[i].size()); j++)
      {
         st[i][j] = t[ist[i][j] - 'A'];
      }
   }
   // cerr << " t = " << t << endl;
   for (int i = 0; s.size() < n - 1; i++)
   {

      // cerr << "uptill now  " << s << " and size = " << s.size() << endl;
      string q = "";
      for (int i = 0; i < 4; i++)
      {
         q += s;
         q += st[i];
      }
      // cout << "queried " << q << "  " << q.size() << endl;
      // cerr << "uptill now  " << s << " and size = " << s.size() << endl;
      k = press(q) - s.size();
      // cerr << "pressing button " << k << endl;
      // cerr << " t = " << t << endl;
      s += t[k];
   }
   string q;
   q += s;
   q += t[0];
   k = press(q) - s.size();
   if (k)
   {
      return q;
   }
   q.clear();
   q += s;
   q += t[1];
   k = press(q) - s.size();
   if (k)
   {
      return q;
   }
   q.clear();

   q += s;
   q += t[2];
   // cout << "returning " << q << endl;
   return q;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...