가장 짧은 스트레이트

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

요약
손에 든 카드를 빠짐없이 연속된 묶음으로 나누어 가장 짧은 묶음을 최대한 길게 만듭니다.
난이도

보통10점 중 6점

유형
그리디, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

카드마다 정수가 하나씩 적혀 있는 카드 게임을 한다.

카드를 여러 장 받으면 받은 카드를 남김없이 스트레이트로 나누어 놓아야 한다. 스트레이트는 값이 연속인 카드의 집합이다. 예를 들어 카드 세 장 {3, 4, 5}도 스트레이트이고, 카드 한 장 {7}도 스트레이트이다. 한 스트레이트에 값이 같은 카드가 두 장 들어갈 수는 없으며, 손패의 카드는 모두 정확히 하나의 스트레이트에 속한다.

나눈 다음에는 가장 짧은 스트레이트의 카드 수만큼 달러를 받는다. 카드가 한 장도 없으면 스트레이트를 만들 수 없으므로 한 푼도 받지 못한다.

손패마다 받을 수 있는 최대 금액을 구하시오.

입력

첫째 줄에 손패의 개수 TT가 주어진다.

다음 TT개 줄에 손패가 하나씩 주어진다. 각 줄은 그 손패의 카드 수 NN으로 시작하고, 그 뒤에 카드에 적힌 값 NN개가 이어진다. 한 줄의 수는 공백 하나로 구분한다.

제한:

  • 1≤T≤1001 \le T \le 100
  • 0≤N≤10000 \le N \le 1000
  • 카드에 적힌 값은 11 이상 1000010000 이하이다

출력

손패마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 세는 손패 번호이고, yy는 받을 수 있는 최대 달러 금액이다.

설명

예제의 첫 번째 손패에는 1부터 10까지 카드 열 장이 있다. 길이가 10인 스트레이트 하나로 전부 묶으면 10달러를 받는다.

두 번째 손패는 {101, 102, 103, 104, 105, 106}과 {103, 104}로 나눌 수 있고, 이때는 2달러를 받는다. {101, 102, 103, 104}와 {103, 104, 105, 106}으로 나누면 4달러를 받는다.

세 번째 손패에는 카드가 없으므로 아무것도 받지 못한다.

네 번째 손패에서 값이 9인 카드는 이웃한 값이 없어서 혼자 스트레이트를 이룬다. 그래서 가장 짧은 스트레이트의 길이는 1이다.

예제3

  1. 예제 1

    입력
    4
    10 1 2 3 4 5 10 9 8 7 6
    8 101 102 103 104 105 106 103 104
    0
    5 1 2 3 4 9
    
    예상 출력
    Case #1: 10
    Case #2: 4
    Case #3: 0
    Case #4: 1
    
  2. 예제 2

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

    입력
    3
    1 1
    1 10000
    2 1 10000
    
    예상 출력
    Case #1: 1
    Case #2: 1
    Case #3: 1