제출 #1358433

#제출 시각아이디문제언어결과실행 시간메모리
1358433cmth콤보 (IOI18_combo)C++20
5 / 100
0 ms412 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];
  for (int i = 0; i < 2; i++) p += p;

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

  string s;
  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;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…