제출 #439410

#제출 시각아이디문제언어결과실행 시간메모리
439410MrCriminalCombo (IOI18_combo)C++17
0 / 100
1 ms200 KiB
#include "bits/stdc++.h"
#include "combo.h"
/*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);
}

}  // namespace

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 press1");
  }
  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;
	for(int i=0;i<N;i++)
	{
		p += 'X';
	}
	std::string c = "ABXY";
	int cur = 0;
	for(int i=0;i<4;i++)
	{
		p[0] = c[i];
		cur = press(p);
		if(cur==N)
		{
			return p;
		}
		else if(cur==1)
		{
			break ;
		}
	}
	for(int i=1;i<N;i++)
	{
		for(int j=0;j<4;j++)
		{
			if(p[0]==c[j]) continue;
			p[i] = c[j];
			cur = press(p);
			if(cur==N)
			{
				return p;
			}
			else if(cur==i+1)
			{
				break;
			}
			//else p.pop_back();
		}
	}
	return p;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...