ページが読み込まれませんか? こちらをクリックすると直るかもしれません。
Placeholder

#4655
インタラクティブ
言語制限

Combo 1s 256MB

問題

당신은 액션 비디오 게임을 하고 있다. 게임 컨트롤러는 4개의 버튼 A, B, X, Y를 가지고 있다. 게임에서 당신은 콤보 동작을 통해 동전을 얻을 수 있다. 당신은 버튼을 연속해서 눌러서 콤보 동작을 만들 수 있다.

이 게임에는 눌러야 할 버튼들의 비밀 순서가 있고, 비밀 순서를 4개 문자 A, B, X, Y로 이루어진 문자열 S로 설명할 수 있다. 당신은 문자열 S을 알지 못하지만 그것의 길이 N(1 ≤ N ≤ 2,000)은 알고 있다.

당신은 S의 첫 번째 문자가 S안에서 다시 나타나지 않는다는 것도 알고 있다. 예를 들어, S는"ABXYY" 또는 "XYYAA"일 수 있지만 "AAAAA" 또는 "BXYBX"가 될 수는 없다.

콤보 동작을 위해서는 4N개 이하의 버튼들을 누른다. p가 당신이 누르는 버튼들의 순서를 나타내는 문자열이라고 하자. 콤보 동작으로 얻는 동전의 수는 p의 부분문자열이 되는 S의 가장 긴 접두사의 길이로 계산된다. 문자열 t의 부분문자열은 t안의 연속된 문자들의 순서(길이가 0인 문자열 가능)이다. t의 접두사는 길이가 0인 문자열 이거나 t의 첫 번째 문자를 포함하는 t의 부분문자열이다.

​당신은 콤보 동작을 사용해서 비밀 문자열을 찾아야 한다.​​​

해야 할 일

당신은 아래 함수를 구현해야 한다.

string guess_sequence(int N)
  • N : 문자열 S의 길이.

  • 이 함수는 각 테스트 케이스 마다 정확히 한번 호출된다.

  • 이 함수는 문자열 S를 반환해야 한다.

프로그램은 다음 함수를 호출할 수 있다.

int press(string p)
  • p : 당신이 누르는 버튼들의 순서.

  • p는 0이상 4N이하 길이의 문자열이여야 한다. p의 각 문자는 A, B, X, Y 중 하나여야 한다.

  • 각 테스트 케이스에 대해 이 함수를 8,000번을 초과해서 호출할 수 없다.

  • 이 함수는 p로 표현된 버튼들의 순서을 눌렸을 때 얻을 수 있는 동전의 수를 반환한다.​

예를 들어, S가 "ABXYY"이고 p가 "XXYYABYABXAY"이면, "ABX"가 p의 부분문자열이면서 S의 가장 긴 접두사이기 때문에 당신은 3개의 동전을 얻는다.


部分問題

番号 点数 条件
#15点

N = 3

#295点

추가 제한은 없다. 이 서브태스크에서는 함수 press의 호출 횟수 q에 따라 점수가 결정된다.

  • qN + 2 라면 95점.

  • N + 2 < qN + 10 이라면 95 - 3(q - N - 2)점.

  • N + 10 < q ≤ 2N + 1 이라면 25점.

  • max{N + 10, 2N + 1} < q ≤ 4N 이라면 5점.

  • 그 외의 경우라면 0점.


出典

IOI 2018 day1 1

ログインしないとコードを書けません。