만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

베라와 LCS

시간 제한2초메모리 제한256 MB

요약
문자열 A와 목표 K가 주어질 때, A의 앞 i글자와 A에서 가장 적게 나온 글자를 N-i개 붙인 문자열이 A와 LCS 길이 K를 갖는 가장 작은 i를 찾는다.
난이도

보통10점 중 7점

유형
문자열, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

베라는 최장 공통 부분 수열(LCS) 문제를 공부하고 있다.

문자열은 소문자 알파벳을 나열한 것이고, 비어 있어도 된다. 문자열 SS의 부분 수열은 SS에서 글자 몇 개를 지우고 남은 문자열이다. 하나도 지우지 않아도 되고 전부 지워도 된다. 예를 들어 vra, a, 빈 문자열, vera는 모두 vera의 부분 수열이다. 두 문자열 AA와 BB의 최장 공통 부분 수열은 둘 모두의 부분 수열 중 길이가 가장 긴 문자열이다. 최장 공통 부분 수열은 여러 개일 수 있다. ea는 vera와 eats의 최장 공통 부분 수열이므로 이 두 문자열의 LCS 길이는 2다.

베라는 길이가 모두 NN인 두 문자열 AA와 BB의 LCS 길이를 구하는 숙제를 받았다. 답을 KK라고 적어 두었는데 BB를 잃어버렸다. AA와 KK가 주어진다. AA와의 LCS 길이가 정확히 KK인 길이 NN짜리 문자열 BB를 찾아라. 베라가 계산을 틀렸다면 그런 BB는 존재하지 않는다.

입력

입력 형식은 다음과 같다.

N K
A
  • 1≤N≤20001 \le N \le 2000
  • 0≤K≤20000 \le K \le 2000
  • NN과 KK는 정수다
  • AA는 소문자 알파벳 NN개로 이루어진다

출력

AA와의 LCS 길이가 KK인 문자열은 여러 개일 수 있으므로, 다음 규칙이 정하는 문자열 하나만 정답으로 인정한다.

AA에 가장 적게 나오는 글자를 cc라고 하자. 그런 글자가 여럿이면 알파벳 순서가 가장 빠른 글자를 고른다. AA에 한 번도 나오지 않는 글자는 나온 횟수가 0이다. i=0,1,…,Ni = 0, 1, \dots, N에 대해 BiB_i를 AA의 앞 ii글자 뒤에 cc를 N−iN - i개 이어 붙인 문자열이라고 하자. AA와 BiB_i의 LCS 길이가 정확히 KK인 가장 작은 ii를 찾아 BiB_i를 한 줄에 출력한다. 그런 ii가 없으면 WRONGANSWER를 출력한다.

힌트

조건을 만족하는 BB가 존재하는지는 NN과 KK만으로 정해지지 않는다. AA에 어떤 글자가 몇 번 나오는지에 따라 달라진다.

예제2

  1. 예제 1

    입력
    4 2
    vera
    
    예상 출력
    vebb
    
  2. 예제 2

    입력
    4 5
    vera
    
    예상 출력
    WRONGANSWER