# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1127582 | Elwino008 | 콤보 (IOI18_combo) | C++20 | 0 ms | 0 KiB |
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(v) v.begin(), v.end()
string f(string a, int N, char st){
int n=a.size();
if(n==N-1){
return a;
}
string q="";
if(st=='A'){
q+=a;
q+='B';
q+=a;
q+="XB";
q+=a;
q+="XX";
q+=a;
q+="XY";
int qwe=press(q);
if(qwe==n){
a+='Y';
}
else if(qwe==n+1){
a+='B';
}
else{
a+='X';
}
}
else if(st=='B'){
q+=a;
q+='A';
q+=a;
q+="XA";
q+=a;
q+="XX";
q+=a;
q+="XY";
int qwe=press(q);
if(qwe==n){
a+='Y';
}
else if(qwe==n+1){
a+='A';
}
else{
a+='X';
}
}
else if(st=='X'){
q+=a;
q+='A';
q+=a;
q+="BA";
q+=a;
q+="BB";
q+=a;
q+="BY";
int qwe=press(q);
if(qwe==n){
a+='Y';
}
else if(qwe==n+1){
a+='A';
}
else{
a+='B';
}
}
else{
q+=a;
q+='A';
q+=a;
q+="BA";
q+=a;
q+="BB";
q+=a;
q+="BX";
int qwe=press(q);
if(qwe==n){
a+='X';
}
else if(qwe==n+1){
a+='A';
}
else{
a+='B';
}
}
return f(a, N, st);
}
mt19937 random(time(NULL));
std::string guess_sequence(int N) {
vector<string>strt;
strt.pb("A");
strt.pb("X");
strt.pb("Y");
strt.pb("B");
sort(all(strt));
shuffle(all(strt), random);
char st;
string a="";
int ind=0;
int q=press(strt[ind]);
while(q!=1){
ind++;
if(ind==3){
break;
}
q=press(strt[ind]);
}
st=strt[ind][0];
a+=st;
string ans=f(a, N, st);
ind=0;
shuffle(all(strt), random);
q=press(ans+strt[ind]);
while(q!=N){
ind++;
if(ind==3){
break;
}
q=press(strt[ind]);
}
ans+=strt[ind];
return ans;
}