가장 짧은 스트레이트
시간 제한5초메모리 제한512 MB
손에 든 카드를 빠짐없이 연속된 묶음으로 나누어 가장 짧은 묶음을 최대한 길게 만듭니다.
문제
카드마다 정수가 하나씩 적혀 있는 카드 게임을 한다.
카드를 여러 장 받으면 받은 카드를 남김없이 스트레이트로 나누어 놓아야 한다. 스트레이트는 값이 연속인 카드의 집합이다. 예를 들어 카드 세 장 {3, 4, 5}도 스트레이트이고, 카드 한 장 {7}도 스트레이트이다. 한 스트레이트에 값이 같은 카드가 두 장 들어갈 수는 없으며, 손패의 카드는 모두 정확히 하나의 스트레이트에 속한다.
나눈 다음에는 가장 짧은 스트레이트의 카드 수만큼 달러를 받는다. 카드가 한 장도 없으면 스트레이트를 만들 수 없으므로 한 푼도 받지 못한다.
손패마다 받을 수 있는 최대 금액을 구하시오.
입력
첫째 줄에 손패의 개수 가 주어진다.
다음 개 줄에 손패가 하나씩 주어진다. 각 줄은 그 손패의 카드 수 으로 시작하고, 그 뒤에 카드에 적힌 값 개가 이어진다. 한 줄의 수는 공백 하나로 구분한다.
제한:
- 카드에 적힌 값은 이상 이하이다
출력
손패마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 1부터 세는 손패 번호이고, 는 받을 수 있는 최대 달러 금액이다.
설명
예제의 첫 번째 손패에는 1부터 10까지 카드 열 장이 있다. 길이가 10인 스트레이트 하나로 전부 묶으면 10달러를 받는다.
두 번째 손패는 {101, 102, 103, 104, 105, 106}과 {103, 104}로 나눌 수 있고, 이때는 2달러를 받는다. {101, 102, 103, 104}와 {103, 104, 105, 106}으로 나누면 4달러를 받는다.
세 번째 손패에는 카드가 없으므로 아무것도 받지 못한다.
네 번째 손패에서 값이 9인 카드는 이웃한 값이 없어서 혼자 스트레이트를 이룬다. 그래서 가장 짧은 스트레이트의 길이는 1이다.