Submission #1370341

#TimeUsernameProblemLanguageResultExecution timeMemory
1370341Godgift42Combo (IOI18_combo)C++20
30 / 100
12 ms460 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;

int press(std::string p);

const long long md=1000000007;
const long long b=31;
const long long d=29;
const long long c=61;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

std::string guess_sequence(int N) {
  int cur=1;
  string st="";
  vector<char> ch;
  if(press("A")){
    st="A";
    ch={'B','X','Y'};
  }
  else if(press("B")){
    st="B";
    ch={'A','X','Y'};
  }
  else if(press("X")){
    st="X";
    ch={'A','B','Y'};
  }
  else{
    st="Y";
    ch={'A','B','X'};
  }
  long long rn=1;
  int pre=-1;
  while(st.size()<N){
    cur=st.size();    
    bool f=false;
    rn=rng();
    for(int i=0;i<2;i++){
      if(pre!=-1){
        if(pre==(i+rn)%3)continue;
        if((i+1+rn)%3==pre and i==2){
          f=true;
          st+=ch[(i+rn)%3];
          break;
        }
      }
      string ps=st;
      ps+=ch[(i+rn)%3];
      long long crn=(rn+i*c)%md;
      for(int i=st.size()+1;i<N;i++){
        crn=rng();
        ps+=ch[(crn)%3];
      }
      int g=press(ps);
      if(g!=st.size()){
        f=true;
        for(int j=cur;j<g;j++)st+=ps[j];
        if(g!=N)pre=ps[g];
        break;
      }
    }
    if(!f){
      st+=ch[(2+rn)%3];
      pre=-1;
    }
    rn=(rn*d)%md; 
  }
  return st;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...