Submission #923624

#TimeUsernameProblemLanguageResultExecution timeMemory
923624LucaLucaMCombo (IOI18_combo)C++17
30 / 100
20 ms1900 KiB
#ifndef COMBO_CPP_INCLUDED #define COMBO_CPP_INCLUDED #include "combo.h" #include <vector> #include <cassert> #include <iostream> std::string str = ""; int NNN; std::string get(std::vector<std::string> v) { if ((int) v.size() == 1) { return v[0]; } int n = (int) v.size(); std::vector<std::string> lt, rt; for (int i = 0; i < n / 2; i++) { lt.push_back(v[i]); } for (int i = n / 2; i < n; i++) { rt.push_back(v[i]); } std::string ask = ""; for (const auto &s : lt) { ask += str + s; } assert((int) ask.size() <= 4 * NNN); if (press(ask) == (int) str.size() + (int) lt[0].size()) { return get(lt); } else { return get(rt); } } std::string guess_sequence(int n) { NNN = n; std::vector<std::string> alphabet = {"A", "B", "X", "Y"}; std::string first = ""; for (int i = 0; i < 3; i++) { if (press(alphabet[i])) { first = alphabet[i]; break; } } if (first.empty()) { first = alphabet.back(); } int ptr = 0; while (alphabet[ptr] != first) { ptr++; } alphabet.erase(alphabet.begin() + ptr); str += first; for (int i = 1; i < n;) { if (((int) str.size() + 3) * 13 <= 4 * n) { /// floor(3^3 / 2) = 13 std::vector<std::string> cand; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { cand.push_back(alphabet[i] + alphabet[j] + alphabet[k]); } } } str += get(cand); i += 3; } else if (((int) str.size() + 2) * 4 <= 4 * n) { /// floor(3^3 / 2) = 4 std::vector<std::string> cand; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cand.push_back(alphabet[i] + alphabet[j]); } } str += get(cand); i += 2; } else { std::vector<std::string> cand; for (int i = 0; i < 3; i++) { cand.push_back(alphabet[i]); } str += get(cand); i++; } } // std::cout << "! " << str << '\n'; return str; } #endif // COMBO_CPP_INCLUDED
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...