Submission #398838

#TimeUsernameProblemLanguageResultExecution timeMemory
398838mshandilyaCombo (IOI18_combo)C++17
100 / 100
48 ms620 KiB
#include <iostream>
#include <string>
#include "combo.h"

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