Submission #1311359

#TimeUsernameProblemLanguageResultExecution timeMemory
1311359vako_pCombo (IOI18_combo)C++20
0 / 100
1 ms400 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define sd second

string curr;
string ch[] = {"A", "B", "X", "Y"};

ll query(vector<vector<ll>> vv){
  string q;
  for(auto it : vv){
    q = q + curr;
    for(auto it1 : it) q = q + ch[it1];
  } 
  // cout << "? " << q << endl;
  ll res = press(q);
  // cout << " ---> " << res << endl;
  return res;
}

std::string guess_sequence(int N) {
  ll res = query({{0, 2, 1, 2}});
  if(res == 0) curr = ch[3];
  else if(res == 1){
    res = query({{0, 1, 0}});
    if(res == 0) curr = ch[2];
    else if(res == 1){
      res = query({{0, 3}});
      if(res == 1) curr = ch[0] + ch[3]; 
      else curr = ch[1] + ch[3];
    }
    else{
      res = query({{0, 1}});
      if(res == 2)  curr = ch[0] + ch[1];
      else curr = ch[1] + ch[0];
    }
  }   
  else{
    res = query({{0, 2}});
    if(res == 2) curr = ch[0] + ch[2];
    else{
      res = query({{1, 2}});
      if(res == 2) curr = ch[1] + ch[2];
      else curr = ch[2] + ch[1];
    }
  }
  // cout << curr << endl;
  string ss = "";
  ss = ss + curr[0];
  // cout << " ---------> " << ss << endl;
  for(int i = 0; i < 3; i++) if(ch[i] == ss) swap(ch[i], ch[3]);
  // cout << ch[0] << endl;
  while(curr.size() < N){
    ll sz = curr.size();
    if(sz == N - 1){
      for(int i = 0; i < 3; i++){
        if(query({{i}}) - sz == 1){
          curr = curr + ch[i];
          break;
        }
      } 
      break;
    }
    ll res = query({{0, 0}, {0, 1}, {1, 0}}) - sz;
    if(res == 0){
      curr = curr + ch[2];
      continue;
    }
    if(res == 1){
      ll res;
      if(sz < N - 2){
        res = query({{0, 2}, {1, 1, 0}, {1, 1, 1}, {1, 1, 2}}) - sz; 
        if(res == 1) curr = curr + ch[1] + ch[2]; 
        else if(res == 2) curr = curr + ch[0] + ch[2];
        else curr = curr + ch[1] + ch[1];
      }
      else{
        // cout << "a" << endl;
        res = query({{0, 2}}) - sz;
        if(res == 2) curr = curr + ch[0] + ch[2];
        else{
          res = query({{1, 2}}) - sz;
          if(res == 2) curr = curr + ch[1] + ch[2];
          else curr = curr + ch[1] + ch[1];
        }
      }
    }
    else{
      if(sz < N - 2){
        ll res = query({{0, 0}, {1, 0, 0}, {1, 0, 1}, {1, 0, 2}}) - sz;
        if(res == 1) curr = curr + ch[0] + ch[1];
        else if(res == 2) curr = curr + ch[0] + ch[0];
        else curr = curr + ch[1] + ch[0];
      }
      else{
        res = query({{0, 0}}) - sz;
        if(res == 2) curr = curr + ch[0] + ch[0];
        else{
          res = query({{1, 0}}) - sz;
          if(res == 2) curr = curr + ch[1] + ch[0];
          else curr = curr + ch[0] + ch[1];
        }
      }
    }
  }
  return curr;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...