제출 #1289432

#제출 시각아이디문제언어결과실행 시간메모리
1289432andreim콤보 (IOI18_combo)C++20
5 / 100
1082 ms1188 KiB
#include "combo.h" #include <random> #include <unordered_map> using namespace std; // 0 : A, 1 : B, 2 : X, 3 : Y mt19937 rng(42); char toBoutons[4] = {'A', 'B', 'X', 'Y'}; bool aucuneCorrelation(string a, vector<unordered_map<char, bool>>& b, int N, int vraiN) { for (int i = 0; i < 1 && i < (int)a.length(); i++) { if (b[vraiN - N + i][a[i]]) return false; } return true; } string genRandom(int vraiN, int N, string old, vector<unordered_map<char, bool>>& vus, vector<unordered_map<char, bool>>& vusDuDernier) { string S = ""; do { S = ""; for (int i = 0; i < N; i++) S += toBoutons[uniform_int_distribution<int>(0, 3)(rng)]; } while (!aucuneCorrelation(S, vus, N, vraiN)); for (int i = 0; i < (int)S.length(); i++) vus[vraiN - N + i][S[i]] = true; for (int i = 0; i < (int)S.length(); i++) vusDuDernier[vraiN - N + i][S[i]] = true; return S; } string extractGood(int N, string S) { string res; for (int i = 0; i < N; i++) res += S[i]; return res; } string guess_sequence(int N) { int coinsPrec = 0; int coinsPrecPrec = 0; string p = ""; vector<unordered_map<char, bool>> vus(N); while (coinsPrec < N) { vector<unordered_map<char, bool>> vusDuDernier(N); coinsPrecPrec = coinsPrec; p = extractGood(coinsPrec, p) + genRandom(N, N - coinsPrec, p, vus, vusDuDernier); coinsPrec = press(p); if (coinsPrec > coinsPrecPrec) { for (int i = coinsPrec; i < N; i++) vus[i] = vusDuDernier[i]; } } return p; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...