고정점 순열

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

요약
1부터 n까지의 순열 중 고정점이 정확히 m개인 것들을 사전순으로 나열했을 때 k번째 순열을 구하고, 그런 순열이 k개 미만이면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 그리디, 수학
정답자
아직 제출이 없습니다

문제

크기 n인 순열은 1부터 n까지의 정수가 각각 정확히 한 번씩 나타나는 정수 리스트 (p1, p2, ..., pn)이다.

순열의 고정점 개수는 pi = i인 인덱스 i의 개수이다.

세 수 n, m, k가 주어질 때, 고정점이 정확히 m개인 크기 n의 순열 중 사전순으로 k번째로 작은 순열을 구하라. 조건을 만족하는 순열이 k개보다 적으면 -1을 출력한다.

입력

한 줄에 공백으로 구분된 세 정수

n (1 ≤ n ≤ 50) m (0 ≤ m ≤ n) k (1 ≤ k ≤ 1018)

가 주어진다. n은 순열의 크기, m은 원하는 고정점의 개수이며, 출력은 1부터 n까지의 수로 이루어진 순열 중 고정점이 정확히 m개인 것들 가운데 사전순으로 k번째로 작은 순열이어야 한다.

출력

원하는 순열을 공백으로 구분된 n개의 정수로 한 줄에 출력하라. 조건을 만족하는 순열이 없으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    3 1 1
    
    예상 출력
    1 3 2
    
  2. 예제 2

    입력
    3 2 1
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    5 3 7
    
    예상 출력
    2 1 3 4 5