만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

타일 자르기 (Small)

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

요약
필요한 2의 거듭제곱 크기 정사각형을 잘라 만들 때 사야 하는 M×M 타일의 최소 개수를 구합니다.
난이도

보통10점 중 5점

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

문제

엔조는 새로 산 집을 고치고 있다. 가장 까다로운 일은 필요한 타일을 정확히 맞춰 사는 것이다.

엔조에게는 정사각형 타일 NN개가 필요하고, kk번째 타일의 한 변 길이는 2Sk2^{S_k}이다. 가게에서는 M×MM \times M 크기의 정사각형 타일만 판다. 엔조는 산 타일을 변에 평행한 방향으로만 자르고, 필요한 타일은 모두 여기서 잘라 낸다. 필요한 타일 한 장은 산 타일 한 장에서 통째로 잘라 내야 하며, 여러 조각을 이어 붙일 수는 없다.

엔조가 사야 하는 타일은 최소 몇 장인가?

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 줄에 테스트 케이스가 한 줄씩 주어진다. 각 줄은 필요한 타일의 개수 NN과 가게에서 파는 타일의 크기 MM으로 시작하고, 그 뒤에 타일의 크기를 정하는 정수 S1,S2,…,SNS_1, S_2, \dots, S_N이 차례로 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤201 \le N \le 20
  • 1≤2Sk≤M≤231−11 \le 2^{S_k} \le M \le 2^{31}-1

출력

각 테스트 케이스마다 "Case #x: y" 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 엔조가 사야 하는 타일의 최소 개수이다.

예제4

  1. 예제 1

    입력
    4
    1 6 2
    2 6 2 2
    3 6 2 1 1
    7 277 3 8 2 6 1 3 6
    
    예상 출력
    Case #1: 1
    Case #2: 2
    Case #3: 1
    Case #4: 2
    
  2. 예제 2

    입력
    1
    1 1 0
    
    예상 출력
    Case #1: 1
    
  3. 예제 3

    입력
    2
    20 2147483647 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    20 2147483647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    
    예상 출력
    Case #1: 20
    Case #2: 1
    
  4. 예제 4

    입력
    3
    2 3 1 1
    6 3 1 0 0 0 0 0
    7 3 1 0 0 0 0 0 0
    
    예상 출력
    Case #1: 2
    Case #2: 1
    Case #3: 2