제출 #1189239

#제출 시각아이디문제언어결과실행 시간메모리
1189239Zakir060콤보 (IOI18_combo)C++20
30 / 100
12 ms452 KiB
#include <string> #include <vector> #include <numeric> #include <algorithm> // Required for std::find // Forward declaration or include header // #include "combo.h" extern int press(std::string p); std::string guess_sequence(int N) { std::string guessed_S = ""; std::vector<char> all_chars = {'A', 'B', 'X', 'Y'}; char first_char = 0; if (N == 0) { return ""; } // --- Step 1: Determine the first character S[0] --- if (press("A") == 1) { guessed_S = "A"; } else if (press("B") == 1) { guessed_S = "B"; } else { if (press("X") == 1) { guessed_S = "X"; } else { guessed_S = "Y"; } } first_char = guessed_S[0]; // --- Step 2: Determine the remaining characters S[1] to S[N-1] --- while (guessed_S.length() < N) { int k = guessed_S.length(); char next_char = 0; // Identify candidates: c1, c2, c3 != first_char; c4 = first_char std::vector<char> other_chars; for (char c : all_chars) { if (c != first_char) { other_chars.push_back(c); } } char c1 = other_chars[0]; char c2 = other_chars[1]; char c3 = other_chars[2]; char c4 = first_char; // Candidate 4 is the first char // Query 1: Test pair (c1, c2) int r1 = press(guessed_S + c1 + guessed_S + c2); if (r1 == k + 1) { // Case A: Possibilities are c1 or c2 // Query 2: Distinguish c1 / c2 int r2 = press(guessed_S + c1); if (r2 == k + 1) { next_char = c1; } else { // r2 must be k next_char = c2; } } else { // r1 == k // Case B: Possibilities are c3 or c4 // Query 2: Distinguish c3 / c4 int r3 = press(guessed_S + c3); if (r3 == k + 1) { next_char = c3; } else { // r3 must be k next_char = c4; // The first character reappears } } // Append the determined character guessed_S.push_back(next_char); } return guessed_S; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...