제출 #398819

#제출 시각아이디문제언어결과실행 시간메모리
398819mshandilyaCombo (IOI18_combo)C++14
0 / 100
1 ms200 KiB
#include <bits/stdc++.h>
#include "combo.h"

using namespace std;

std::string guess_sequence(int N) {
  std::string query;
  std::vector<char> knownstr;
  char start;
  int preknown = 0, score;
  while(preknown<N) {
    string p(knownstr.begin(), knownstr.end());
    if(preknown==0) {
      score = press("AB");
      if(score){
        score = press("A");
        if(score)
          start = 'A';
        else
          start = 'B';
      }
      else{
        score = press("X");
        if(score)
          start = 'X';
        else
          start = 'Y';
      }
      knownstr.push_back(start);
      preknown++;
    }
    else if(preknown==N-1) {
      query = p + "AB";
      score = press(query);
      if(score==preknown+1) {
        score = press(p + "A");
        if(score==preknown+1)
          knownstr.push_back('A');
        else
          knownstr.push_back('B');
      }
      else {
        score = press(p + "X");
        if(score==preknown+1)
          knownstr.push_back('X');
        else
          knownstr.push_back('Y');
      }
      preknown++;
    }
    else {
      switch(start) {
        case 'A':
        query = p + "BB" + p + "BX" + p + "BY" + p + "X";
        score = press(query);
        if(score==preknown+2)
          knownstr.push_back('B');
        else if(score==preknown+1)
          knownstr.push_back('X');
        else
          knownstr.push_back('Y');
        break;
        case 'B':
        query = p + "AA" + p + "AX" + p + "AY" + p + "X";
        score = press(query);
        if(score==preknown+2)
          knownstr.push_back('A');
        else if(score==preknown+1)
          knownstr.push_back('X');
        else
          knownstr.push_back('Y');
        break;
        case 'X':
        query = p + "AA" + p + "AB" + p + "AY" + p + "B";
        score = press(query);
        if(score==preknown+2)
          knownstr.push_back('A');
        else if(score==preknown+1)
          knownstr.push_back('B');
        else
          knownstr.push_back('Y');
        break;
        case 'Y':
        query = p + "AA" + p + "AB" + p + "AX" + p + "B";
        score = press(query);
        if(score==preknown+2)
          knownstr.push_back('A');
        else if(score==preknown+1)
          knownstr.push_back('B');
        else
          knownstr.push_back('X');
        break;
      }
      preknown++;
    }
  }
  string S(knownstr.begin(), knownstr.end());
  return S;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...