Submission #600552

#TimeUsernameProblemLanguageResultExecution timeMemory
600552jack715Combo (IOI18_combo)C++14
100 / 100
43 ms620 KiB
#include "combo.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pp pop_back
#define mp make_pair
#define bb back
#define ff first
#define ss second

using namespace std;

string pos = "ABXY";

string guess_sequence(int n) {
  string f = "AB";
  if (press(f) != 0) {
    f = "A";
    if (press(f) == 0) f = "B"; 
  } else {
    f = "X";
    if (press(f) == 0) f = "Y";
  }

  string s = "";
  for (int i = 0; i < 4*n; i++) 
    s += f;
  string rem = "";
  for (int i = 0; i < 4; i++) {
    if (pos[i] == f[0]) continue;
    rem += pos[i];
  }

  // cout << f << '\n';
  for (int i = 1; i < n-1; i++) {
    // cout << s << '\n';
    s[i] = rem[0];
    s[i+n] = rem[1];
    s[i+n+1] = rem[0];
    s[i+2*n] = rem[1];
    s[i+2*n+1] = rem[1];    
    s[i+3*n] = rem[1];
    s[i+3*n+1] = rem[2];

    int now = press(s);
    if (now == i+1)
      s[i] = rem[0], s[i+n] = rem[0], s[i+n*2] = rem[0], s[i+n*3] = rem[0];
    else if (now == i+2)
      s[i] = rem[1], s[i+n] = rem[1], s[i+n*2] = rem[1], s[i+n*3] = rem[1];
    else 
      s[i] = rem[2], s[i+n] = rem[2], s[i+n*2] = rem[2], s[i+n*3] = rem[2];
    s[i+1] = f[0], s[i+n+1] = f[0], s[i+n*2+1] = f[0], s[i+n*3+1] = f[0];
  }

  if (n > 1) {
    s[n-1] = rem[0];
    s[n*2-1] = rem[1];
    if (press(s) == n) {
      s[n*2-1] = f[0];
      if (press(s) != n) s[n-1] = rem[1];
    } else s[n-1] = rem[2];
  }

  s = s.substr(0, n);
  return s;
}


/*
  ABXYY

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...