Submission #1358434

#TimeUsernameProblemLanguageResultExecution timeMemory
1358434cmth콤보 (IOI18_combo)C++20
94 / 100
6 ms460 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;

string guess_sequence(int N) {
  char let[4] = {'A', 'B', 'X', 'Y'};
  int banidx = -1;

  string p = "A";

  if (press(p) == 1) banidx = 0;
  else {
    for (int i = 1; i < 3; i++) {
      p[0] = let[i];
      if (press(p) == 1) {
        banidx = i;
        break;
      }
    }
  }
  if (banidx == -1) {
    p[0] = let[3];
    banidx = 3;
  }

  if (N == 1) return p;

  for (int i = 1; i < N; i++) p += let[banidx];
  string s = p;
  for (int i = 0; i < 2; i++) p += p;

  // cout << p << '\n';

  if (N != 2) {
    for (int i = 1; i < N-1; i++) {
      p[i] = let[(banidx+1)%4];

      p[i+N] = let[(banidx+2)%4];
      p[i+N+1] = let[(banidx+1)%4];

      p[i+2*N] = let[(banidx+2)%4];
      p[i+2*N+1] = let[(banidx+2)%4];

      p[i+3*N] = let[(banidx+2)%4];
      p[i+3*N+1] = let[(banidx+3)%4];

      // cout << p << ' ';

      int coin = press(p);

      // cout << coin << '\n';

      if (coin == i+2) p[i] = let[(banidx+2)%4];
      else if (coin == i) p[i] = let[(banidx+3)%4];

      p = p.substr(0, N);
      if (i+2 == N) {
        s = p;
      }
      for (int j = 0; j < 2; j++) p += p;
    }
  }

    for (int i = 0; i < 4; i++) {
      if (i == banidx) continue;
      s[N-1] = let[i];
      if (press(s) == N) break;
    }

  // cout << "FINAL " << s << '\n';

  return s;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...