Submission #999253

#TimeUsernameProblemLanguageResultExecution timeMemory
999253pakapuCombo (IOI18_combo)C++17
100 / 100
23 ms1648 KiB
#include <vector>
#include <iostream>
#include <cassert>
#include <algorithm>

#include "combo.h"

std::string get_first_char()
{
  // std::vector<std::string> available_chars = {"A", "B", "X", "Y"};
  //
  // for (int i = 0; i < 4; i++) {
  //   if (press(available_chars[i]) == 1) {
  //     return available_chars[i];
  //   }
  // }
  //
  // assert(false);
  // return "-";

  if (press("AB") != 0) {
    if (press("A") != 0) {
      return "A";
    }
    return "B";
  }
  else {
    if (press("X") != 0) {
      return "X";
    }
    return "Y";
  }
}

std::string guess_sequence(int N) {
  std::vector<std::string> available_chars = {"A", "B", "X", "Y"};

  std::string first_char = get_first_char();

  available_chars.erase(find(available_chars.begin(), available_chars.end(), first_char));

  // std::cout << "Available characters: ";
  // for (auto c : available_chars) {
  //   std::cout << c << " ";
  // }
  // std::cout << '\n';

  assert(available_chars.size() == 3);

  std::string ans = first_char;
  for (int i = 1; i < N - 1; i++) {
    std::string next = "";
    next += ans + available_chars[0];
    next += ans + available_chars[1] + available_chars[0];
    next += ans + available_chars[1] + available_chars[1];
    next += ans + available_chars[1] + available_chars[2];
    int coins = press(next) - i;
    assert(coins >= 0 && coins <= 2);

    if (coins == 0) {
      ans += available_chars[2];
    }
    else if (coins == 1) {
      ans += available_chars[0];
    }
    else {
      ans += available_chars[1];
    }
  }

  if ((int)ans.size() == N) {
    return ans;
  }

  int final_coins1 = press(ans + available_chars[0]);
  int final_coins2 = press(ans + available_chars[1]);

  if (final_coins1 == N) {
    ans += available_chars[0];
  }
  else if (final_coins2 == N) {
    ans += available_chars[1];
  }
  else {
    ans += available_chars[2];
  }

  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...