타일 자르기 (Large)

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

요약
변의 길이가 2의 거듭제곱인 정사각형 타일을 변과 평행하게 잘라 MxM 타일에 담을 때 필요한 최소 구매 개수를 구합니다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 비트 연산
정답자
아직 제출이 없습니다

문제

엔조는 새로 산 집을 고치고 있다. 가장 까다로운 일은 타일을 딱 필요한 만큼만 사는 것이다. 엔조에게는 정사각형 타일 NN개가 필요하고, 각 타일의 한 변의 길이는 차례대로 2S1,2S2,…,2SN2^{S_1}, 2^{S_2}, \dots, 2^{S_N}이다. 같은 크기가 여러 번 나올 수 있다.

가게에서 파는 타일은 한 변이 MM인 정사각형 한 종류뿐이다. 필요한 타일은 모두 사 온 타일에서 잘라 내야 하고, 엔조는 편하게 작업하려고 자를 때 항상 타일의 변과 평행하게만 자른다. 필요한 타일 하나는 사 온 타일 하나에서 통째로 잘라 내야 하며, 잘라 낸 조각을 이어 붙일 수는 없다.

엔조가 사야 하는 M×MM \times M 타일의 최소 개수를 구하라.

입력

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

제한

  • 1≤T≤10001 \le T \le 1000
  • 1≤N≤5001 \le N \le 500
  • 1≤2Sk≤M≤231−11 \le 2^{S_k} \le M \le 2^{31} - 1

출력

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

예제1

  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