Submission #1311374

#TimeUsernameProblemLanguageResultExecution timeMemory
1311374vako_pCombo (IOI18_combo)C++20
100 / 100
14 ms540 KiB
#include "combo.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define sd second ll n; string curr; string ch[] = {"A", "B", "X", "Y"}; ll query(vector<vector<ll>> vv){ string q; for(auto it : vv){ q = q + curr; for(auto it1 : it) q = q + ch[it1]; } // cout << "? " << q << endl; assert(q.size() <= 4 * n); ll res = press(q); // cout << " ---> " << res << endl; return res; } std::string guess_sequence(int N) { n = N; if(N == 1){ for(int i = 0; i < 3; i++) if(query({{i}})) return ch[i]; return ch[3]; } ll res = query({{0, 2, 1, 2}}); if(res == 0) curr = ch[3]; else if(res == 1){ res = query({{0, 1, 0}}); if(res == 0) curr = ch[2]; else if(res == 1){ res = query({{0, 3}}); if(res == 2) curr = ch[0] + ch[3]; else curr = ch[1] + ch[3]; } else{ res = query({{0, 1}}); if(res == 2) curr = ch[0] + ch[1]; else curr = ch[1] + ch[0]; } } else{ res = query({{0, 2}}); if(res == 2) curr = ch[0] + ch[2]; else{ res = query({{1, 2}}); if(res == 2) curr = ch[1] + ch[2]; else curr = ch[2] + ch[1]; } } // cout << curr << endl; string ss = ""; ss = ss + curr[0]; // cout << " ---------> " << ss << endl; for(int i = 0; i < 3; i++) if(ch[i] == ss) swap(ch[i], ch[3]); // cout << ch[0] << endl; while(curr.size() < N){ ll sz = curr.size(); if(sz == N - 1){ for(int i = 0; i < 2; i++){ if(query({{i}}) - sz == 1){ curr = curr + ch[i]; return curr; } } return curr + ch[2]; } ll res = query({{0, 0}, {0, 1}, {1, 0}}) - sz; if(res == 0){ curr = curr + ch[2]; continue; } if(res == 1){ ll res; if(sz < N - 2){ res = query({{0, 2}, {1, 1, 0}, {1, 1, 1}, {1, 1, 2}}) - sz; if(res == 1) curr = curr + ch[1] + ch[2]; else if(res == 2) curr = curr + ch[0] + ch[2]; else curr = curr + ch[1] + ch[1]; } else{ // cout << "a" << endl; res = query({{0, 2}}) - sz; if(res == 2) curr = curr + ch[0] + ch[2]; else{ res = query({{1, 2}}) - sz; if(res == 2) curr = curr + ch[1] + ch[2]; else curr = curr + ch[1] + ch[1]; } } } else{ if(sz < N - 2){ ll res = query({{0, 0}, {1, 0, 0}, {1, 0, 1}, {1, 0, 2}}) - sz; if(res == 1) curr = curr + ch[0] + ch[1]; else if(res == 2) curr = curr + ch[0] + ch[0]; else curr = curr + ch[1] + ch[0]; } else{ res = query({{0, 0}}) - sz; if(res == 2) curr = curr + ch[0] + ch[0]; else{ res = query({{1, 0}}) - sz; if(res == 2) curr = curr + ch[1] + ch[0]; else curr = curr + ch[0] + ch[1]; } } } } return curr; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...