동화

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

요약
인구가 정해진 n개의 행성과 초기 함선 k척이 주어진다. 침공은 인구 이상의 함선이 필요하고, 정복한 행성에서 동원을 하면 그 인구만큼 함선을 얻는다. 모든 행성을 정복하는 최소 동원 횟수를 구하거나 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

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

문제

계몽된 외계 종족이 한 성계를 동화하여 주민들이 완벽에 도달하도록 돕고자 한다. 주민들이 저항할 수도 있지만, 여러분도 잘 알다시피 저항은 무의미하다.

성계에는 n개의 행성이 있고, 각 행성의 인구는 a1, a2, . . . , an이다. 외계인은 k척의 동화 함선으로 시작하며 다음 행동 중 아무거나 할 수 있다.

  • 침공은 함대의 일부를 행성에 착륙시켜야 한다. 착륙하는 함선의 수 s는 행성의 인구 m보다 크거나 같아야 한다. 침공 후 이 함선들은 사라지고, 행성은 정복되어 인구가 m + s가 된다.
  • 동원은 정복한 행성에서 행성 인구만큼의 새 함선을 만든다. 각 행성은 최대 한 번만 동원할 수 있다.

외계인에게 침공은 쉽고 자연스러운 일이지만, 동원은 다소 까다롭다. 이들이 최소한의 동원 횟수로 성계의 모든 행성을 정복하도록 도와라.

입력

첫 줄에는 테스트 케이스의 수 z가 주어진다 (1 ≤ z ≤ 30). 테스트 케이스가 이어지며, 각 테스트 케이스의 형식은 다음과 같다.

각 테스트 케이스의 첫 줄에는 두 정수 n과 k가 주어진다 (1 ≤ n ≤ 200 000; 1 ≤ k ≤ 109). 각각 행성의 수와 외계인의 초기 함대 규모이다. 둘째 줄에는 n개의 정수 a1, . . . , an이 주어진다 (1 ≤ ai ≤ 109). 각 행성의 인구이다.

모든 테스트 케이스의 n 값의 합은 500 000을 넘지 않는다.

출력

각 테스트 케이스마다 정복에 필요한 최소 동원 횟수를 한 정수로 출력한다. 정복이 불가능하면 −1을 출력한다.

예제1

  1. 예제 1

    입력
    4
    3 15
    6 5 26
    3 15
    6 5 27
    2 1000000000
    500123123 497000000
    7 2
    6 2 4 1 9 3 12
    
    예상 출력
    2
    -1
    0
    4