제출 #1336572

#제출 시각아이디문제언어결과실행 시간메모리
1336572tuncay_pasha콤보 (IOI18_combo)C++20
100 / 100
8 ms484 KiB
#include "combo.h"
#include "bits/stdc++.h"

using namespace std;

string guess_sequence(int N) {
  char ff = '$';
  int cnt = press("AB");
  if (cnt == 2) {
    ff = 'A';
  }
  else if (cnt == 1) {
    if (press("A") == 1) {
      ff = 'A';
    }
    else ff = 'B';
  }
  else {
    if (press("X") == 1) {
      ff = 'X';
    }
    else ff = 'Y';
  }
  string ans = "";
  ans += ff;
  for (int i = 1; i < N; ++i) {
    string t = "";
    if (ff == 'A') {
      t += ans, t += 'B', t += ans, t += "XX", t += ans, t += "XY", t += ans, t += "XB";
      if ((int)t.size() > 4*N) {
        t = ans, t += 'B';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'X';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'Y';
        return t;
      }
      int sz = press(t);
      if (sz == ans.size()) {
        ans += 'Y';
      }
      else if (sz == ans.size() + 1) {
        ans += 'B';
      }
      else ans += 'X';
    }
    else if (ff == 'B') {
      t += ans, t += 'A', t += ans, t += "XX", t += ans, t += "XY", t += ans, t += "XA";
      if ((int)t.size() > 4*N) {
        t = ans, t += 'A';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'X';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'Y';
        return t;
      }
      int sz = press(t);
      if (sz == ans.size()) {
        ans += 'Y';
      }
      else if (sz == ans.size() + 1) {
        ans += 'A';
      }
      else ans += 'X';
    }
    else if (ff == 'X') {
      t += ans, t += 'A', t += ans, t += "BB", t += ans, t += "BY", t += ans, t += "BA";
      if ((int)t.size() > 4*N) {
        t = ans, t += 'A';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'B';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'Y';
        return t;
      }
      int sz = press(t);
      if (sz == ans.size()) {
        ans += 'Y';
      }
      else if (sz == ans.size() + 1) {
        ans += 'A';
      }
      else ans += 'B';
    }
    else {
      t += ans, t += 'A', t += ans, t += "XX", t += ans, t += "XA", t += ans, t += "XB";
      if ((int)t.size() > 4*N) {
        t = ans, t += 'A';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'B';
        if (press(t) == ans.size() + 1) return t;
        t = ans, t += 'X';
        return t;
      }
      int sz = press(t);
      if (sz == ans.size()) {
        ans += 'B';
      }
      else if (sz == ans.size() + 1) {
        ans += 'A';
      }
      else ans += 'X';
    }
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...