Logo
(追記) (追記ここまで)

25029번 - Joyful KMP

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB80211948.718%

문제

최근 KMP(Knuth-Morris-Pratt)알고리즘을 배운 홍준이는 실패함수의 이해에 대해서 골몰하고 있다. 어떤 문자열 $S = s_1s_2\cdots s_N$에 대해, 이 문자열의 실패함수는 $N$개의 값 $f[1], f[2], \cdots , f[N]$으로 나타나며, $f[i]$는 $s_1s_2\cdots s_i$의 접두사가 되면서 동시에 접미사가 되는 길이 $i$미만의 문자열 중 가장 긴 것의 길이이다. 만약 그런 문자열이 없다면 0ドル$을 가진다. 예를 들어, $S = $"abcabd"의 실패함수는 다음과 같다.

$i$ 1ドル$ 2ドル$ 3ドル$ 4ドル$ 5ドル$ 6ドル$
$s_i$ a b c a b d
$f[i]$ 0ドル$ 0ドル$ 0ドル$ 1ドル$ 2ドル$ 0ドル$

홍준이는 실패함수를 이해하기 위해서 어떤 문자열을 하나 놓고, 이 문자열과 같은 실패함수를 가지는 알파벳 소문자 만으로 이루어진 문자열을 모두 구해 사전 순으로 나열하려고 한다. 옆에서 지켜보던 당신은 홍준이를 도와 주어진 문자열과 같은 실패함수를 가지는 문자열의 개수와 그 중 사전 순으로 $K$번째인 문자열을 구해주는 프로그램을 작성하기로 했다.

입력

첫 번째 줄에 길이가 1ドル$이상 10ドル^6$이하인 문자열이 주어진다. 이 문자열은 알파벳 소문자 만으로 이루어져 있다.

두 번째 줄에 하나의 양의 정수 $K$($ 1 ≤ K ≤ 9 \times 10^{18}$)가 주어진다.

출력

첫 번째 줄에는 입력으로 주어진 문자열과 같은 실패 함수를 가지는 알파벳 소문자 만으로 이루어진 문자열의 개수를 출력한다. 이 수는 매우 클 수 있으므로, 1ドル,000円,000円,007円$로 나눈 나머지를 출력하도록 한다.

두 번째 줄에는 입력으로 주어진 문자열과 같은 실패 함수를 가지는 알파벳 소문자 만으로 이루어진 문자열 중에서 사전 순으로 $K$번째에 오는 문자열을 출력한다. $K$가 너무 커서 이런 문자열이 존재하지 않는다면 “OVER”를 출력한다.

제한

예제 입력 1

abab
100

예제 출력 1

650
dzdz

예제 입력 2

abab
1000

예제 출력 2

650
OVER

힌트

첫 번째 문자와 세 번째 문자가 같고, 두 번째 문자와 네 번째 문자가 같고, 첫 번째 문자와 두 번째 문자가 다른 꼴의 문자열만이 입력으로 주어진 문자열과 실패함수가 같다. 그러므로 26ドル \times 25 = 650$이 abab와 실패함수가 같은 문자열의 개수이다.

그 중에서 사전 순으로 100ドル$번째에 오는 문자열은 dzdz이다.

출처

Contest > kriiicon > 제5회 kriiicon JK번

  • 문제를 번역한 사람: koosaga
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /