Submission #1086444

#TimeUsernameProblemLanguageResultExecution timeMemory
1086444Noname_1900Combo (IOI18_combo)C++17
100 / 100
26 ms1884 KiB
#include "combo.h"
#include <bits/stdc++.h>
using namespace std;
string l[4] = {"A", "B", "X", "Y"};
/*
namespace {

constexpr int MAX_N = 2000;
constexpr int MAX_NUM_MOVES = 8000;

int N;
std::string S;

int num_moves;

void wrong_answer(const char *MSG) {
  printf("Wrong Answer: %s\n", MSG);
  exit(0);
}
}

int press(std::string p) {
  if (++num_moves > MAX_NUM_MOVES) {
    wrong_answer("too many moves");
  }
  int len = p.length();
  if (len > 4 * N) {
    wrong_answer("invalid press");
  }
  for (int i = 0; i < len; ++i) {
    if (p[i] != 'A' && p[i] != 'B' && p[i] != 'X' && p[i] != 'Y') {
      wrong_answer("invalid press");
    }
  }
  int coins = 0;
  for (int i = 0, j = 0; i < len; ++i) {
    if (j < N && S[j] == p[i]) {
      ++j;
    } else if (S[0] == p[i]) {
      j = 1;
    } else {
      j = 0;
    }
    coins = std::max(coins, j);
  }
  return coins;
}
/**/
std::string guess_sequence(int N) {
  std::string p = "";
  std::string S = "";
  l[0] = "A";
  l[1] = "B";
  l[2] = "X";
  l[3] = "Y";
  p = "AB";
  int coins = press(p);
  int premLettre = 0;
  if(coins > 0)
  {
      p = "A";
      coins = press(p);
      if(coins > 0)
      {
         premLettre = 0;
      }
      else
      {
         premLettre = 1;
      }
  }
  else
  {
      p = "X";
      coins = press(p);
      if(coins > 0)
      {
         premLettre = 2;
      }
      else
      {
         premLettre = 3;
      }
  }
  p = "";
  for (int i = 0; i < 4 * N; ++i) {
      p += l[premLettre];
  }
  
  S += l[premLettre];
  swap(l[premLettre], l[3]);
  if(N == 1)  return S;
  for(int iLettre = 1; iLettre < N-1; iLettre++)
  {
      p = "";
     int deuxiemeLettre = 0;
     for(int i = 0; i < 3; i++)
     {
         p += S + l[deuxiemeLettre] + l[deuxiemeLettre+i];
     }
     p += S + l[deuxiemeLettre+1];
     coins = press(p);
     if(coins == iLettre)
     {
       S += l[2];
     }
     else if(coins == iLettre+1)
     {
         S += l[1];
     }
     else
     {
         S += l[0];
     }
  }
  string V = "";
  V += S;
  V += l[0];
  V += S;
  V += l[1];
  coins = press(V);
  if(coins == N)
  {
      V = S;
      V += l[0];
      coins = press(V);
      if(coins == N)
      {
         return V;
      }
      else
      {
         S += l[1];
         return S;
      }

  }
// else
   S += l[2];
   return S;

}
/**/
/*
int main() {
   while(true) {
  char buffer[MAX_N + 1];
  if (scanf("%s", buffer) != 1) {
    fprintf(stderr, "Error while reading input\n");
    exit(1);
  }
  S = buffer;
  N = S.length();
  cout << N << "\n";
  num_moves = 0;
  std::string answer = guess_sequence(N);
  if (answer != S) {
    wrong_answer("wrong guess");
   // exit(0);
  }
  else
   printf("Accepted: %d\n", num_moves);
  //return 0;
   }
}
/**/

Compilation message (stderr)

combo.cpp:48:1: warning: "/*" within comment [-Wcomment]
   48 | /**/
      |  
combo.cpp:166:1: warning: "/*" within comment [-Wcomment]
  166 | /**/
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...