Submission #884439

#TimeUsernameProblemLanguageResultExecution timeMemory
884439gustavo_dCombo (IOI18_combo)C++17
30 / 100
20 ms1224 KiB
// https://oj.uz/problem/view/IOI18_combo > p152 #include "combo.h" #include <bits/stdc++.h> using namespace std; /* botões A,B,X,Y no jogo, você pode fazer combos apertando + de um juntos tem uma sequência secreta S de N chars primeiro char dela nunca repete, bruta A, B, C, D (AABB, CCDD > o que for, você tenta um e se n é o outro; custo 3) > sobra 3 possibilidades pro resto; sendo A, ABAC se n for é o AD, se não tenta tipo AB se nao for é o AC (custo 2n-2) você deve digitar até 4N chars, sua pontuação é o tamanho do maior prefixo de S que é substring da sequência sua após o mínimo de combos 4N, você deve descobrir S custo total: 2n-2+2 = 2n pode chamar press com 0 a 4N chars até 8000 vezes e N até 2000 q<=N+2 O(n) primeira: 4 chamadas, testa primeiro char 2N: só sobra 3 possibilidades pra cada char (primeiro não repete), aí vocẽ testa primeiro com segundo se for, testa 1 se não for é o outro; se não é os 2, é o 3o */ string guess_sequence(int N) { string S = ""; string p = "AB"; int coins = press(p); if (coins == 0) { // ou X out Y p = "X"; coins = press(p); if (coins == 0) S = "Y"; else S = "X"; } else { p = "A"; coins = press(p); if (coins == 0) S = "B"; else S = "A"; } vector<char> others; if ('A' != S[0]) others.push_back('A'); if ('B' != S[0]) others.push_back('B'); if ('X' != S[0]) others.push_back('X'); if ('Y' != S[0]) others.push_back('Y'); for (int i = 0; i < N-1; i++) { p = "" + S; p += others[0]; p += S[0]; p += S; p += others[1]; coins = press(p); if (coins == (int)S.size()) S += others[2]; else { p = "" + S; p += others[0]; coins = press(p); if (coins == (int)S.size()) S += others[1]; else S += others[0]; } } return S; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...