제출 #595291

#제출 시각아이디문제언어결과실행 시간메모리
595291Sam_a17콤보 (IOI18_combo)C++14
100 / 100
32 ms520 KiB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define ld long double
#define ll long long

#define sz(x) (int((x).size()))
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define uniq(x) x.resize(unique(all(x)) - x.begin());
#define lb lower_bound
#define ub upper_bound

int press(std::string p);

std::string guess_sequence(int N) {
  string pref = "";
  int ans = press("AB"), it = 0;
  if(ans == 2) {
    pref += "AB", it = 2;
  } else if(ans == 1) {
    ans = press("A");
    if(ans == 1) {
      pref += "A";
    } else {
      pref += "B";
    }
    it = 1;
  } else {
    ans = press("X");
    if(ans == 1) {
      pref += "X";
    } else {
      pref += "Y";
    }
    it = 1;
  }

  if(N == sz(pref)) {
    return pref;
  }

  vector<char> vi;
  for(auto i: {'X', 'Y', 'A', 'B'}) {
    if(pref[0] != i) {
      vi.push_back(i);
    }
  }

  //
  for(int i = it; i < N - 1; i++) {
    string harc = pref + vi[0] + pref + vi[1] + vi[0] + pref + vi[1] + vi[1] + pref + vi[1] + vi[2];
    ans = press(harc);

    if(ans == i) {
      pref += vi[2];
    } else if(ans == (i + 1)) {
      pref += vi[0];
    } else if(ans == (i + 2)) {
      pref += vi[1];
    }
  }

  // cout << pref << endl;

  int ans1 = press(pref + vi[0]);
  if(ans1 == N) {
    return (pref + vi[0]);
  }
  int ans2 = press(pref + vi[1]);
  if(ans2 == N) {
    return (pref + vi[1]);
  }
  return (pref + vi[2]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...