아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

탈의실

시간 제한6초메모리 제한512 MB

요약
원형 문자열에서 길이 K인 부분 문자열을 골라 모든 문자를 덮고 그중 사전식 최댓값을 최소로 만듭니다.
난이도

어려움10점 중 8점

유형
문자열, 그리디, 이분 탐색, 문자열 매칭
정답자
아직 제출이 없습니다

문제

바이너리 카지노에는 여러 이상한 방이 있는데, 그중 하나가 탈의실이다. 하루에도 여러 번, 최소 두 번(근무 시작 전과 종료 후) 탈의실에 들어가야 한다. 탈의실에 들어가는 데 열쇠나 출입 코드는 필요 없다. 대신 완전히 새로운 보안 잠금 장치가 있다.

이 잠금 장치는 탈의실에 들어갈 때마다 생성된 퍼즐을 제시하며, 풀어야 한다. 퍼즐을 푸는 데 오랜 시간이 걸리기 때문에 이 장치는 외부인이 탈의실에 들어오는 것을 막아 준다. 카지노에서 얼마간 일한 직원들만이 퍼즐을 익히게 된다.

카지노에서 일한 지 2주밖에 되지 않은 당신은 퍼즐을 충분히 빨리 풀지 못해 이미 세 번 지각했다. 그래서 퍼즐을 푸는 프로그램을 작성하기로 했다. 퍼즐은 다음과 같다.

길이 NN의 순환 문자열이 주어지며, 소문자 영어 알파벳으로 구성된다. 길이 KK의 부분 문자열(연속한 문자 구간)을 골라 표시하여 문자열의 모든 문자가 표시될 때까지 반복한다. 부분 문자열을 표시해도 원래 문자열은 바뀌지 않으며, 각 문자는 여러 번 표시될 수 있다. 골라진 부분 문자열 중 사전순으로 최대인 부분 문자열을 출력해야 한다. 또한 출력하는 부분 문자열은 사전순으로 최소여야 한다.

예를 들어 문자열이 "acdb"이고 N=4N = 4, K=3K = 3이라고 하자. 부분 문자열 "acd"와 "bac"를 골라 문자열 전체를 표시할 수 있다. 퍼즐의 답은 "bac"이다.

입력

첫째 줄에 두 정수 NN과 KK가 주어진다. (1≤N≤5⋅1051 \le N \le 5 \cdot 10^5, 1≤K≤N1 \le K \le N) NN은 문자열의 길이, KK는 표시하는 부분 문자열의 길이이다. 둘째 줄에 길이 NN의 소문자 영어 알파벳으로 이루어진 순환 문자열이 주어진다.

출력

골라진 부분 문자열 중 사전순으로 최대인 부분 문자열을 출력한다. 이때 결과는 사전순으로 최소여야 한다.

예제3

  1. 예제 1

    입력
    4 3
    acdb
    
    예상 출력
    bac
    
  2. 예제 2

    입력
    6 2
    aababa
    
    예상 출력
    ab
    
  3. 예제 3

    입력
    10 4
    abaaabaaba
    
    예상 출력
    aaba