Submission #1172492

#TimeUsernameProblemLanguageResultExecution timeMemory
1172492versesrev콤보 (IOI18_combo)C++20
0 / 100
0 ms396 KiB
// 17:31

#include <string>
#include <vector>
#include <functional>
#include <cassert>
#include "combo.h"

std::string guess_sequence (int N) {
  std::vector<char> cs{'a', 'b', 'x', 'y'};
  char start = std::invoke([&]{
    int v1 = press("ab");
    if (v1 == 1) {
      if (press("a") == 1) return 'a';
      else return 'b';
    }
    else {
      if (press("x") == 1) return 'x';
      else return 'y';
    }
  });
  
  std::erase(cs, start);
  
  std::string ans;
  ans += start;
  for (int i = 1; i < N - 1; ++i) {
    std::string query = ans + cs[0];
    query += ans + cs[1] + cs[0];
    query += ans + cs[1] + cs[1];
    query += ans + cs[1] + cs[2];
    int val = press(query);
    if (val == ans.length()) {
      ans += cs[2];
    }
    else if (val == ans.length() + 1) {
      ans += cs[0];
    }
    else {
      assert(val == ans.length() + 2);
      ans += cs[1];
    }
  }
  
  std::string query = ans + cs[0] + ans + cs[1];
  if (press(query) == N - 1) {
    ans += cs[2];
  }
  else if(press(ans + cs[0]) == N) {
    ans += cs[0];
  }
  else {
    ans += cs[1];
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...