# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
153351 | Ruxandra985 | 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 <cstdio>
#include <cstring>
#include "combo.h"
char next (char ch){
if (ch == 'A' || ch == 'X')
return ch + 1;
if (ch == 'B')
return 'X';
return 'A';
}
string guess_sequence (int n){
int i,j;
char curr,fst,scd,thd;
string ask,sol;
ask.clear();
ask.push_back('A');
ask.push_back('B');
if (press(ask)){
/// e A sau B
ask.clear();
ask.push_back('A');
if (press(ask))
curr = 'A';
else curr = 'B';
}
else {
/// e X sau Y
ask.clear();
ask.push_back('X');
if (press(ask))
curr = 'X';
else curr = 'Y';
}
/// 2 interogari
/// curr e primul caracter
sol.clear();
sol.push_back(curr);
fst = next(curr);
scd = next(fst);
thd = next(scd);
for (i=2;i<n;i++){
ask.clear();
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back(fst);
ask.push_back(fst);
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back(fst);
ask.push_back(scd);
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back(fst);
ask.push_back(thd);
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back(scd);
int x = press(ask) - (i-1);
if (x == 2)
sol.push_back(fst);
else if (x == 1)
sol.push_back(scd);
else sol.push_back(thd);
}
/// n - 2 interogari
/// total : n interogari
/// acum pt ultimul caracter
ask.clear();
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back('A');
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back('B');
if (press(ask) == n){
/// e A sau B
ask.clear();
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back('A');
if (press(ask)==n)
sol.push_back('A');
else sol.push_back('B');
}
else {
/// e X sau Y
ask.clear();
for (j=0;j<sol.size();j++){
ask.push_back(sol[j]);
}
ask.push_back('X');
if (press(ask)==n)
sol.push_back('X');
else sol.push_back('Y');
}
return sol;
}