제출 #999253

#제출 시각아이디문제언어결과실행 시간메모리
999253pakapu콤보 (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...