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

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

순환 회전 암호

시간 제한1초메모리 제한32 MB

요약
버로우즈-휠러 변환의 인덱스 i와 마지막 열 R이 주어질 때 원래 문자열을 복원한다.
난이도

어려움10점 중 8점

유형
문자열, 정렬, 배열
정답자
아직 제출이 없습니다

문제

경찰은 한동안 어느 범죄 조직이 주고받는 암호문을 가로채 왔지만, 이를 해독하지 못하고 있었다. 최근 한 급습 작전에서 경찰은 암호화 장치를 압수했고, 정밀 분석을 통해 그 작동 원리를 밝혀냈다.

이 장치는 평문을 입력으로 받는다. 먼저 평문을 모두 소문자로 바꾸고 라틴 문자 a … z 를 제외한 모든 문자를 제거하여 문자열 S=s1s2…snS = s_1 s_2 \dots s_n 을 만든다. 그런 다음 SS 의 모든 순환 회전 S1…SnS_1 \dots S_n (여기서 Si=si…sns1…si−1S_i = s_i \dots s_n s_1 \dots s_{i-1}) 을 사전순으로 정렬한다. 암호문은 정렬된 회전들 중 원래 문자열 SS 가 놓인 위치의 번호 ii 와, 정렬된 순서대로 각 회전의 마지막 글자를 모아 만든 문자열 RR 로 이루어진다.

예를 들어 abracadabra 는 3 rdarcaaaabb 로 암호화된다.

 1. aabracadabr = S11
 2. abraabracad = S8
 3. abracadabra = S1
 4. acadabraabr = S4
 5. adabraabrac = S6
 6. braabracada = S9
 7. bracadabraa = S2
 8. cadabraabra = S5
 9. dabraabraca = S7
10. raabracadab = S10
11. racadabraab = S3

정렬된 회전에는 11 부터 1111 까지 번호가 매겨져 있고, 세 번째 회전이 원래 문자열이므로 i=3i = 3 이다. 각 회전의 마지막 글자를 위에서 아래로 읽으면 rdarcaaaabb 가 된다.

암호문 (i,R)(i, R) 이 주어졌을 때 원래 문자열 SS 를 복원하라. 메시지가 매우 길 수 있으므로 프로그램은 효율적으로 동작해야 한다.

입력

첫째 줄에 번호 ii (1≤i≤n1 \le i \le n) 가 주어진다. 둘째 줄에 길이가 nn 인 문자열 RR (1≤n≤1 000 0001 \le n \le 1\,000\,000) 이 주어진다. 원래 문자열 SS 는 반드시 존재하며 유일함이 보장된다.

출력

원래 문자열 SS 를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3
    rdarcaaaabb
    
    예상 출력
    abracadabra
    
  2. 예제 2

    입력
    4
    nnbaaa
    
    예상 출력
    banana