왓슨과 구간 (Large)
시간 제한5초메모리 제한512 MB
점화식으로 N개의 구간을 생성한 뒤, 구간 하나를 정확히 제거했을 때 남는 정수 피복 개수의 최솟값을 구한다.
문제
셜록과 왓슨은 프로그래밍 수업에서 C++ 언어를 완전히 익히고 이제 알고리즘 문제로 넘어갔다. 오늘 수업에서 강사는 1차원 구간을 합치는 문제를 소개했다. 개의 구간이 주어지고, 번째 구간은 양 끝점을 포함하는 구간 이다. 여기서 이다.
강사는 구간 집합의 덮인 넓이를 적어도 하나의 구간에 속하는 정수의 개수로 정의했다. 엄밀히 말하면, 어떤 에 대해 를 만족하는 정수 가 덮인 넓이에 하나씩 더해진다.
왓슨은 늘 셜록에게 도전하기를 좋아한다. 이번에는 셜록에게 구간을 정확히 하나 제거해서 남은 구간의 덮인 넓이를 최소로 만들라고 했다. 개의 구간 중 정확히 하나를 제거했을 때 가능한 덮인 넓이의 최솟값을 구해 셜록을 도와주자.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. 다음 개의 줄에 테스트 케이스가 한 줄에 하나씩 주어진다.
각 테스트 케이스는 정수 8개 , , , , , , , 으로 이루어진 한 줄이다. 은 구간의 개수이고 나머지 7개 값은 나머지 구간을 생성하는 매개변수로, 다음과 같이 사용한다.
먼저 , 로 둔다. 그다음 부터 까지 아래 점화식으로 와 를 만든다.
부터 까지 모든 에 대해 , 로 정의한다.
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄을 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 구간을 정확히 하나 제거한 뒤 남은 모든 구간의 덮인 넓이의 최솟값이다.
제한
- (500000)
힌트
1번 케이스에서 생성 방법에 따라 만들어지는 구간은 하나다. 유일한 구간을 제거하면 덮인 넓이는 0이다.
2번 케이스에서 만들어지는 구간은 , , 이다. 첫 번째, 두 번째, 세 번째 구간을 제거하면 남은 구간의 덮인 넓이는 각각 5, 6, 4가 된다.
3번 케이스에서 만들어지는 구간은 , , , 이다. 첫 번째, 두 번째, 세 번째, 네 번째 구간을 제거하면 남은 구간의 덮인 넓이는 각각 10, 9, 9, 10이 된다.