재미와 이득을 위한 분할

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

요약
정수 m을 n개의 오름차순 양의 정수로 나누는 모든 분할 중 사전순으로 k번째 분할을 구하는 문제입니다.
난이도

보통10점 중 6점

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

문제

양의 정수 m을 n개의 원소로 나눈 분할(단, n ≤ m)이란, a₁ + ... + aₙ = m이고 a₁ ≤ a₂ ≤ ... ≤ aₙ을 만족하는 양의 정수 수열 a₁, ..., aₙ을 말한다. m을 n개의 원소로 나눈 모든 분할을 사전순으로 나열했을 때 k번째에 오는 분할을 구하여라.

분할 사이의 사전순은 다음과 같이 정의한다. m을 n개로 나눈 두 분할 a = [a₁, ..., aₙ]와 b = [b₁, ..., bₙ]에 대하여, 어떤 1 ≤ i ≤ n이 존재하여 모든 j < i에서 aⱼ = bⱼ이고 aᵢ < bᵢ이면 a < b이다. 분할은 사전순 오름차순으로 나열하며, 가장 먼저 오는 분할은 1, 1, ..., 1, m − n + 1이다.

입력

첫째 줄에 테스트 케이스의 수 c가 주어진다. 이어지는 c개의 줄에는 각각 세 정수 m, n, k가 주어지며, 1 ≤ m ≤ 220, 1 ≤ n ≤ 10, 1 ≤ k이고 k는 m을 n개의 원소로 나눈 분할의 개수 이하이다.

출력

각 테스트 케이스마다 m을 n개의 원소로 나눈 k번째 분할을 출력한다. 분할의 각 원소는 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    9 4 3
    10 10 1
    
    예상 출력
    1
    1
    3
    4
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1