왓슨과 구간 (스몰)
시간 제한5초메모리 제한512 MB
점화식으로 N개의 구간을 만들고, 구간 하나를 정확히 제거했을 때 남은 구간이 덮는 정수의 개수가 최소가 되는 값을 구한다.
문제
셜록과 왓슨은 프로그래밍 수업에서 C++을 충분히 익히고 알고리즘 문제로 넘어갔다. 오늘 수업에서 조교는 일차원 구간을 합치는 문제를 소개했다. 구간 개가 주어지고, 번째 구간은 양 끝을 포함하는 로 정의된다. 여기서 이다.
조교는 구간 집합의 덮인 넓이를 적어도 한 구간에 속하는 정수의 개수로 정의했다. 정확히 말하면, 인 가 존재할 때 정수 가 덮인 넓이에 기여한다.
왓슨은 늘 셜록에게 도전 과제를 낸다. 이번에는 구간을 정확히 하나 지워서 남은 구간의 덮인 넓이를 가장 작게 만들라고 했다. 구간 개 중 정확히 하나를 지운 뒤 얻을 수 있는 덮인 넓이의 최솟값을 구하라.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스는 정수 여덟 개 , , , , , , , 이 공백으로 구분되어 한 줄에 주어진다. 은 구간의 개수이고, 첫 번째 구간은 이다. 나머지 일곱 값은 남은 구간을 만드는 데 쓰는 파라미터다.
먼저 , 로 둔다. 그다음 부터 까지 아래 점화식으로 와 를 생성한다.
부터 까지 , 로 정한다.
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 구간을 정확히 하나 지운 뒤 남은 구간의 덮인 넓이의 최솟값이다.
제한
힌트
예제의 첫 번째 케이스에서 생성 규칙을 따르면 구간은 하나뿐이다. 하나뿐인 구간을 지우면 덮인 넓이는 이다.
두 번째 케이스에서 생성된 구간은 이다. 첫 번째, 두 번째, 세 번째 구간을 각각 지우면 남은 구간의 덮인 넓이는 차례로 , , 가 된다.
세 번째 케이스에서 생성된 구간은 이다. 첫 번째부터 네 번째까지 구간을 각각 지우면 남은 구간의 덮인 넓이는 차례로 , , , 이 된다.