Submission #713083

#TimeUsernameProblemLanguageResultExecution timeMemory
713083hoainiemCombo (IOI18_combo)C++14
30 / 100
46 ms780 KiB
#include "combo.h" #include <bits/stdc++.h> using namespace std; string vt, st; pair<int, int>ds[3]{{0, 1}, {0, 2}, {1, 2}}; string s[3]; int k, mask; std::string guess_sequence(int n) { string ans; srand(time(NULL)); k = press("AB"); if (k == 2) ans = "AB"; else{ if (k == 1){ if (press("A")) ans = "A"; else ans = "B"; } else{ if (press("X")) ans = "X"; else ans = "Y"; } } vt = {'A', 'B', 'X', 'Y'}; for (int i = 0; i < 4; i++) if (vt[i] == ans[0]){ vt.erase(vt.begin() + i); break; } mask = vt[0] ^ vt[1] ^ vt[2]; s[0] = (st + vt[0]) + vt[1]; s[1] = (st + vt[0]) + vt[2]; s[2] = (st + vt[1]) + vt[2]; while ((int)ans.size() < n){ int sz = ans.size(); if (n - (int)ans.size() == 1){ if (press(ans + vt[0]) == n) return ans + vt[0]; else{ if(press(ans + vt[1]) == n) return ans + vt[1]; return ans + vt[2]; } } string op = s[rand() % 3]; char u = op[0], v = op[1]; k = press(ans + u + u + ans + u + v + ans + v + u + ans + v + v); if (k == sz) ans.push_back((char)(mask ^ op[0] ^ op[1])); else{ if (k - sz == 1){ char nct = mask ^ op[0] ^ op[1]; if (press(ans + u + nct) == sz + 2) ans = ans + u + nct; else ans = ans + v + nct; } else{ int tmp = press(ans + u + u + ans + v + v); if (tmp - sz == 2){ if (press(ans + u + u) == sz + 2) ans = ans + u + u; else ans = ans + v + v; } else{ if (press(ans + u + v) == sz + 2) ans = ans + u + v; else ans = ans + v + u; } } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...