전화번호

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

요약
7자리 16진수 전화번호를 항상 최소 S 이상의 문자 거리를 유지하도록 그리디하게 배정할 때, K번째로 배정되는 번호를 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
그리디, 조합론, 수학, 비트 연산
정답자
아직 제출이 없습니다

문제

새 전화번호 체계에서는 모든 번호가 7자리 16진수 문자열이다. 두 전화번호의 거리는 같은 위치의 문자가 서로 다른 자리의 개수로 정의한다. 예를 들어 1b100fa와 11b0ffa는 2번째, 3번째, 5번째 문자가 달라 거리가 3이다.

번호는 차례로 배정되며, 이미 배정된 어떤 두 번호 사이의 거리도 적어도 S가 되어야 한다. 새 번호가 필요할 때마다 이 조건을 유지하는 7자리 16진수 문자열 중 사전순, 즉 수의 크기순으로 가장 작은 번호를 선택한다.

S와 K가 주어질 때, 이 규칙으로 배정되는 K번째 전화번호를 출력하라.

입력

첫째 줄에 S와 K가 공백으로 구분되어 주어진다. S는 1 이상 3 이하의 자연수이고, K는 300,000 이하의 자연수이다.

출력

첫째 줄에 K번째 전화번호를 출력한다. 16진수에 쓰이는 알파벳은 소문자로 출력한다.

예제3

  1. 예제 1

    입력
    1 5
    
    예상 출력
    0000004
    
  2. 예제 2

    입력
    2 17
    
    예상 출력
    0000101
    
  3. 예제 3

    입력
    3 33
    
    예상 출력
    0002023