| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 153351 | Ruxandra985 | 콤보 (IOI18_combo) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
