해커
시간 제한0.5초메모리 제한128 MB
S부터 t까지의 문자열 중 t의 롤링 해시값과 같은 문자열이 정확히 K개가 되는 첫 t를 찾아, 그 K개를 사전순으로 출력한다.
문제
브루노는 단어를 수로 바꾸려고 롤링 해시를 쓴다.
알고리즘은 이렇게 동작한다.
- 해시를 에서 시작한다.
- 문자열의 문자를 앞에서부터 하나씩 보면서, 현재 해시에 를 곱하고 그 문자의 알파벳 순번(부터 까지)을 더한다.
- 이렇게 얻은 값을 으로 나눈 나머지가 최종 해시다.
이반은 영어 소문자로만 이루어진 길이 짜리 문자열을 사전순으로 모두 적은 목록을 구했다. 그런데 종이가 찢어져서 문자열 로 시작해 로 끝나는 부분만 남았다.
이반은 남은 목록에서 해시가 같은 서로 다른 문자열 개를 찾으려 한다. 브루노의 알고리즘을 망가뜨리려는 이반의 계획을 도와라.
입력
첫째 줄에 문제에서 설명한 자연수 , 이 주어진다. ()
둘째 줄에 목록에 있는 문자열의 길이 이 주어진다. ()
셋째 줄에 남은 목록의 첫 문자열 가 주어진다. 길이는 이고 영어 소문자로만 이루어져 있다.
넷째 줄에 이반이 원하는 문자열의 개수 가 주어진다. ()
출력
답은 다음 규칙으로 하나로 정한다. 남은 목록을 부터 사전순으로 훑어보면서, 문자열 까지 봤을 때 부터 까지 중 해시가 와 같은 문자열이 처음으로 개가 되면 거기서 멈춘다. 이때 해시가 와 같은 그 개를 사전순으로 한 줄에 하나씩 출력한다. 마지막 줄은 가 된다.
목록 끝까지 가도 해시가 같은 문자열이 개인 값이 없으면 한 단어만 출력한다.