게임 예측

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

요약
1부터 n*m까지의 카드를 m명이 나눠 갖는 게임에서, 상대가 어떻게 내더라도 내가 확보할 수 있는 최대 승리 라운드 수를 구한다.
난이도

어려움10점 중 8점

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

문제

당신을 포함한 MM명이 특별한 카드 게임을 한다. 게임을 시작할 때 각 플레이어는 NN장의 카드를 받는다. 각 카드에는 11 이상 N×MN \times M 이하의 서로 다른 정수 하나가 눈금(pip)으로 적혀 있으며, 같은 눈금을 가진 카드는 존재하지 않는다.

한 라운드에서는 모든 플레이어가 자신의 카드 중 한 장을 내서 비교한다. 가장 큰 눈금의 카드를 낸 플레이어가 그 라운드를 이기고, 다음 라운드로 넘어간다. NN번의 라운드가 끝나면 모든 카드를 다 사용하게 되며, 가장 많은 라운드를 이긴 플레이어가 게임의 승자가 된다.

처음에 받은 당신의 카드가 주어질 때, 상대들이 어떻게 카드를 내더라도 당신이 최소한 확실히 이길 수 있는 라운드 수의 최댓값을 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스의 첫 줄에는 두 정수 mm (2≤m≤202 \le m \le 20)과 nn (1≤n≤501 \le n \le 50)이 주어지며, 각각 플레이어 수와 각 플레이어가 처음에 받는 카드 수를 의미한다. 다음 줄에는 당신이 처음에 받은 카드의 눈금을 나타내는 nn개의 양의 정수가 주어진다. 각 케이스 사이는 빈 줄로 구분된다.

입력의 끝은 두 개의 00이 적힌 줄로 표시된다.

출력

각 테스트 케이스마다 한 줄에 Case x: y 형식으로 출력한다. xx는 테스트 케이스 번호(11부터 시작), yy는 해당 게임에서 당신이 최소한 확실히 이길 수 있는 라운드 수이다.

예제1

  1. 예제 1

    입력
    2 5
    1 7 2 10 9
    
    6 11
    62 63 54 66 65 61 57 56 50 53 48
    
    0 0
    
    예상 출력
    Case 1: 2
    Case 2: 4