제출 #1216556

#제출 시각아이디문제언어결과실행 시간메모리
1216556adriines06콤보 (IOI18_combo)C++20
100 / 100
7 ms508 KiB
#include "combo.h"
#include<bits/stdc++.h>
using namespace std;

std::string guess_sequence(int N) {
  string s="";
  vector<string>op;
  if(press("AB")>=1) {
    if(press("A")==1){
      s+='A';
      op={"BB","BX","BY","X"};
    }
    else{
      s+='B';
      op={"AA","AX","AY","X"};
    }
  }
  else if(press("X")==1){
    s+='X';
    op={"BB","BA","BY","A"};
  }
  else{
    s+='Y';
    op={"BB","BX","BA","X"};
  }
  //cout<<s<<"\n";
  for (int i = 1; i < N-1; ++i) {
    string ns=s+string(op[0])+s+string(op[1])+s+string(op[2])+s+string(op[3]);
    int c=press(ns);
    int t=s.size();
    if(s[0]=='A'){
      if(c==t) s+='Y';
      else if(c==t+1) s+='X';
      else s+='B';
    }
    else if(s[0]=='B'){
      if(c==t) s+='Y';
      else if(c==t+1) s+='X';
      else s+='A';
    }
    else if(s[0]=='X'){
      if(c==t) s+='Y';
      else if(c==t+1) s+='A';
      else s+='B';
    }
    else{
      if(c==t) s+='A';
      else if(c==t+1) s+='X';
      else s+='B';
    }

  }
  //cout<<s<<"\n";
  if(N==1) return s;
  if(press(s+'A'+s+'B')==N){
    if(press(s+'A')==N) s+='A';
    else s+='B';
  }
  else{
    if(press(s+'X')==N) s+='X';
    else s+='Y';
  }
  return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...