# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
908284 | dragusanu_rares | Combo (IOI18_combo) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
using namespace std;
string S="XABYBABABYYAYBA";
int it=0;
int press(string s){
it++;
int raspuns=0;
for(int i=0;i<s.size();i++){
int poz=0;
while(poz<S.size()&&i+poz<s.size()&&s[i+poz]==S[poz]){
poz++;
}
raspuns=max(raspuns,poz);
}
return raspuns;
}
string cunoscut;
char ch1,a,b,c;
inline void init(){
if(ch1=='A'){
a='B';
b='X';
c='Y';
}
else if(ch1=='B'){
a='A';
b='X';
c='Y';
}
else if(ch1=='X'){
a='A';
b='B';
c='Y';
}
else{
a='A';
b='B';
c='X';
}
}
inline void afla(){
string guess=cunoscut+b+cunoscut+c+a+cunoscut+c+b+cunoscut+c+c;
int x=press(guess)-cunoscut.size();
if(x==0)cunoscut.push_back(a);
else if(x==1)cunoscut.push_back(b);
else cunoscut.push_back(c);
}
string guess_sequence(int n){
if(n==1){
if(press("X")==1)return "X";
else if(press("Y")==1)return "Y";
else if(press("A")==1)return "A";
else return "B";
}
else{
if(press("XY")>=1){
if(press("X")==1)ch1='X';
else ch1='Y';
}
else{
if(press("A")==1)ch1='A';
else ch1='B';
}
cunoscut=ch1;
init();
while(cunoscut.size()<n-1){
afla();
}
if(press(cunoscut+a)==n)return cunoscut+a;
else if(press(cunoscut+b)==n)return cunoscut+b;
else return cunoscut+c;
}
}