Stringer

면접 대비

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

요약
N개 문자의 개수가 각각 정해져 있을 때 모든 순열을 사전순으로 나열했을 때 K번째 문자열을 구한다.
난이도

보통10점 중 6점

유형
조합론, 수학, 그리디, 문자열 매칭
정답자
아직 제출이 없습니다

문제

알파벳의 처음 NN개 문자로만 이루어진 문자열들을 생각하자. 각 문자열에 들어가는 a의 개수, b의 개수 등은 문자마다 미리 정해진 값(서로 다를 수 있다)으로 고정되어 있다. 이러한 문자열을 모두 모아 사전순으로 나열하고 00번부터 번호를 매긴다. 인덱스 KK가 주어질 때, 이 목록에서 KK번째 문자열을 출력하여라.

예를 들어 문자 N=2N = 2개(a와 b)를 사용하고 a가 정확히 22개, b가 정확히 33개인 문자열들을 사전순으로 정렬하면 다음과 같다.

번호문자열번호문자열
0aabbb5babab
1ababb6babba
2abbab7bbaab
3abbba8bbaba
4baabb9bbbaa

K=5K = 5이면 답은 babab이다.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 두 줄로 구성된다.

첫 번째 줄에는 두 정수 NN과 KK가 주어진다 (1≤N≤201 \le N \le 20, 0≤K<m0 \le K < m). 여기서 NN은 사용하는 알파벳 문자의 개수, KK는 찾고자 하는 목록 원소의 번호이며, mm은 목록에 들어 있는 문자열의 총 개수이다. mm은 입력으로 직접 주어지지 않는다.

mm은 매우 커서 전체 목록을 만드는 것이 불가능할 수도 있지만, 입력은 mm과 KK가 각각 부호 있는 32비트 정수 범위에 들어가도록 주어진다.

두 번째 줄에는 NN개의 음이 아닌 정수가 주어지며, 각각 a의 개수, b의 개수 등을 나타낸다. 이 정수들의 합은 최소 11, 최대 5050이다.

입력의 끝은 두 개의 00으로 이루어진 줄로 표시된다.

출력

각 데이터셋마다 답 문자열을 한 줄에 하나씩 출력한다. 불필요한 공백을 출력하지 말고, 답 사이에 빈 줄을 출력하지 마라.

예제3

  1. 예제 1

    입력
    2 5
    2 3
    3 0
    2 3 1
    0 0
    
    예상 출력
    babab
    aabbbc
    
  2. 예제 2

    입력
    1 0
    5
    0 0
    
    예상 출력
    aaaaa
    
  3. 예제 3

    입력
    2 9
    2 3
    0 0
    
    예상 출력
    bbbaa