Submission #1315194

#TimeUsernameProblemLanguageResultExecution timeMemory
1315194Zone_zoneeCombo (IOI18_combo)C++20
100 / 100
8 ms500 KiB
#include <vector>
#include "combo.h"

std::string guess_sequence(int N) {
  using namespace std;
  string s = "";
  // 2 presses
  if(press("AB")) s += press("A") ? 'A' : 'B';
  else if(press("X")) s += 'X';
  else s += 'Y';
  vector<char> chars;
  if(s[0] != 'A') chars.push_back('A');
  if(s[0] != 'B') chars.push_back('B');
  if(s[0] != 'X') chars.push_back('X');
  if(s[0] != 'Y') chars.push_back('Y');
  // N-2 presses
  for(int i = 1; i < N-1; ++i){
    string t = s;
    t += chars[1];
    for(char c : chars) t += s + chars[2] + c;
    int p = press(t);
    s += chars[p-i];
    // if we loop i upto N
    // s size can be upto N-1
    // t size is 3s + 1 + 6 = 3s + 7 = 3(N-1) + 7 = 3N + 4
    // which is too big for N = 3, so we use i < N
  }
  // catch N == 1 case so it doesn't add over N
  if(N == 1) return s;
  // make up for the cut loop, 2 presses
  if(press(s+"A"+s+"B") == N) s += (press(s+"A") == N) ? 'A' : 'B';
  else if(press(s+"X") == N) s += 'X';
  else s += 'Y';
  
  return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...