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

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

친구여, 트론크 한 닢만 나눠주겠나?

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

요약
서로 다른 단위분수 n개의 합이 정확히 1이 되는 조합을, 사용 횟수 제한과 금지된 분모 조건 아래 모두 세어 출력한다.
난이도

보통10점 중 7점

유형
백트래킹, 정수론, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

트론(Tron)의 세계에서 쓰이는 기본 화폐 단위는 트론크(Tronk) 입니다. 트론크의 잔돈을 만드는 일은 생각보다 까다롭습니다. 미국에는 각각 1달러의 12\frac{1}{2}, 14\frac{1}{4}, 110\frac{1}{10}, 120\frac{1}{20}, 1100\frac{1}{100} 의 가치를 가지는 하프달러, 쿼터, 다임, 니켈, 페니가 있습니다. 그러나 트론의 세계에는 모든 양의 정수의 역수에 해당하는 동전이 하나씩, 무한히 많이 존재합니다.

1, 12, 13, 14, 15, …1,\ \frac{1}{2},\ \frac{1}{3},\ \frac{1}{4},\ \frac{1}{5},\ \dots

즉, 가장 작은 동전이라는 것이 존재하지 않습니다.

정확히 nn 개의 동전을 사용하여 1 트론크의 잔돈을 만드는 서로 다른 방법은 몇 가지일까요? 다시 말해, 합이 정확히 11 이 되도록 nn 개의 단위분수를 고르는 방법의 수를 구하는 것입니다. 예를 들어 n=3n = 3 일 때는 정확히 세 가지 방법이 있습니다.

13+13+13,12+13+16,12+14+14.\frac{1}{3}+\frac{1}{3}+\frac{1}{3},\qquad \frac{1}{2}+\frac{1}{3}+\frac{1}{6},\qquad \frac{1}{2}+\frac{1}{4}+\frac{1}{4}.

여기에 두 가지 제약이 추가됩니다.

  • 정수 rr 이 주어집니다. 어떤 동전도 rr 번을 초과하여 사용할 수 없습니다. 예를 들어 r=2r = 2 이면 위의 첫 번째 조합은 더 이상 유효하지 않지만 나머지 두 조합은 여전히 유효합니다. r=0r = 0 이면 각 동전을 원하는 만큼 사용할 수 있습니다.
  • 정수 목록 F={f1,f2,…,fk}F = \{f_1, f_2, \dots, f_k\} 가 주어집니다. 이 목록에 있는 값의 역수 1fi\frac{1}{f_i} 는 사용할 수 없습니다. 예를 들어 F={4,6}F = \{4, 6\} 이면 14\frac{1}{4} 과 16\frac{1}{6} 을 쓸 수 없으므로 위에서는 첫 번째 조합만 유효합니다.

보고하는 모든 조합은 정확해야 합니다. 부동소수점 오차와 매우 작은 동전(예: 110000000\frac{1}{10000000}) 때문에 동전들의 합이 11 에 임의로 가깝게 다가갈 수는 있지만, 합이 정확히 11 이 아니라면 그 조합은 틀린 것입니다.

입력

첫 번째 줄에는 테스트 케이스의 수 TT (T≤20T \le 20) 가 주어집니다. 이어지는 TT 개의 줄에는 각각 하나의 테스트 케이스가 다음 순서로 주어집니다.

  • nn — 반드시 사용해야 하는 동전의 개수 (n≤10n \le 10);
  • rr — 반복 사용 한도 (r=0r = 0 이면 각 동전을 원하는 만큼 사용할 수 있음);
  • kk — 금지된 동전의 수 (k≤20k \le 20);
  • f1,f2,…,fkf_1, f_2, \dots, f_k — 금지된 동전들.

어떤 유효한 조합도 110000000\frac{1}{10000000} 보다 작은 동전을 필요로 하지 않는다고 가정해도 됩니다. 즉, 등장할 수 있는 모든 분모는 10,000,00010{,}000{,}000 이하입니다.

출력

각 테스트 케이스에 대해 다음 형식으로 결과를 출력합니다.

먼저 머리글 줄을 출력합니다.

Case i : Number of coins = n; Repetitions = r; Forbidden = [f_1 f_2 ... f_k]

여기서 ii 는 11 부터 시작하는 테스트 케이스 번호이며, 금지된 동전은 입력에서 주어진 순서대로 나열합니다(없으면 빈 대괄호 [] 를 씁니다).

그다음 유효한 각 조합을 한 줄에 하나씩 출력합니다. 한 줄 안에서는 동전의 분모를 비내림차순으로 공백 하나로 구분하여 나열합니다. 예를 들어 집합 {16,13,12}\{\frac{1}{6}, \frac{1}{3}, \frac{1}{2}\} 는 2 3 6 으로 씁니다. 조합들은 분모 수열을 앞에서부터 원소별로 비교하는 사전식 오름차순으로 나열해야 합니다.

마지막으로 유효한 조합의 개수 CC 에 대해 C solutions found 줄을 출력합니다. 유효한 조합이 하나도 없으면 조합 줄 없이 No solutions found 를 대신 출력합니다.

예제4

  1. 예제 1

    입력
    3
    3 0 0
    5 1 2 3 4
    4 1 6 2 3 4 5 6 7
    
    예상 출력
    Case 1 : Number of coins = 3; Repetitions = 0; Forbidden = []
    2 3 6
    2 4 4
    3 3 3
    3 solutions found
    Case 2 : Number of coins = 5; Repetitions = 1; Forbidden = [3 4]
    2 5 6 8 120
    2 5 6 9 45
    2 5 6 10 30
    2 5 6 12 20
    4 solutions found
    Case 3 : Number of coins = 4; Repetitions = 1; Forbidden = [2 3 4 5 6 7]
    No solutions found
    
  2. 예제 2

    입력
    1
    1 0 0
    
    예상 출력
    Case 1 : Number of coins = 1; Repetitions = 0; Forbidden = []
    1
    1 solutions found
    
  3. 예제 3

    입력
    1
    3 2 0
    
    예상 출력
    Case 1 : Number of coins = 3; Repetitions = 2; Forbidden = []
    2 3 6
    2 4 4
    2 solutions found
    
  4. 예제 4

    입력
    1
    4 0 2 2 3
    
    예상 출력
    Case 1 : Number of coins = 4; Repetitions = 0; Forbidden = [2 3]
    4 4 4 4
    1 solutions found