왓슨과 구간 (스몰)

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

요약
점화식으로 N개의 구간을 만들고, 구간 하나를 정확히 제거했을 때 남은 구간이 덮는 정수의 개수가 최소가 되는 값을 구한다.
난이도

보통10점 중 5점

유형
구간, 정렬, 완전 탐색
정답자
아직 제출이 없습니다

문제

셜록과 왓슨은 프로그래밍 수업에서 C++을 충분히 익히고 알고리즘 문제로 넘어갔다. 오늘 수업에서 조교는 일차원 구간을 합치는 문제를 소개했다. 구간 NN개가 주어지고, ii번째 구간은 양 끝을 포함하는 [Li,Ri][L_i, R_i]로 정의된다. 여기서 Li≤RiL_i \le R_i이다.

조교는 구간 집합의 덮인 넓이를 적어도 한 구간에 속하는 정수의 개수로 정의했다. 정확히 말하면, Lj≤p≤RjL_j \le p \le R_j인 jj가 존재할 때 정수 pp가 덮인 넓이에 기여한다.

왓슨은 늘 셜록에게 도전 과제를 낸다. 이번에는 구간을 정확히 하나 지워서 남은 구간의 덮인 넓이를 가장 작게 만들라고 했다. 구간 NN개 중 정확히 하나를 지운 뒤 얻을 수 있는 덮인 넓이의 최솟값을 구하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스는 정수 여덟 개 NN, L1L_1, R1R_1, AA, BB, C1C_1, C2C_2, MM이 공백으로 구분되어 한 줄에 주어진다. NN은 구간의 개수이고, 첫 번째 구간은 [L1,R1][L_1, R_1]이다. 나머지 일곱 값은 남은 구간을 만드는 데 쓰는 파라미터다.

먼저 x1=L1x_1 = L_1, y1=R1y_1 = R_1로 둔다. 그다음 i=2i = 2부터 NN까지 아래 점화식으로 xix_i와 yiy_i를 생성한다.

  • xi=(A×xi−1+B×yi−1+C1) mod Mx_i = (A \times x_{i-1} + B \times y_{i-1} + C_1) \bmod M
  • yi=(A×yi−1+B×xi−1+C2) mod My_i = (A \times y_{i-1} + B \times x_{i-1} + C_2) \bmod M

i=2i = 2부터 NN까지 Li=min⁡(xi,yi)L_i = \min(x_i, y_i), Ri=max⁡(xi,yi)R_i = \max(x_i, y_i)로 정한다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 구간을 정확히 하나 지운 뒤 남은 구간의 덮인 넓이의 최솟값이다.

제한

  • 1≤T≤501 \le T \le 50
  • 1≤N≤10001 \le N \le 1000
  • 0≤L1≤R1≤1090 \le L_1 \le R_1 \le 10^9
  • 0≤A≤1090 \le A \le 10^9
  • 0≤B≤1090 \le B \le 10^9
  • 0≤C1≤1090 \le C_1 \le 10^9
  • 0≤C2≤1090 \le C_2 \le 10^9
  • 1≤M≤1091 \le M \le 10^9

힌트

예제의 첫 번째 케이스에서 생성 규칙을 따르면 구간은 {[1,1]}\{[1, 1]\} 하나뿐이다. 하나뿐인 구간을 지우면 덮인 넓이는 00이다.

두 번째 케이스에서 생성된 구간은 {[2,5],[3,5],[4,7]}\{[2, 5], [3, 5], [4, 7]\}이다. 첫 번째, 두 번째, 세 번째 구간을 각각 지우면 남은 구간의 덮인 넓이는 차례로 55, 66, 44가 된다.

세 번째 케이스에서 생성된 구간은 {[3,4],[1,9],[0,8],[2,4]}\{[3, 4], [1, 9], [0, 8], [2, 4]\}이다. 첫 번째부터 네 번째까지 구간을 각각 지우면 남은 구간의 덮인 넓이는 차례로 1010, 99, 99, 1010이 된다.

예제1

  1. 예제 1

    입력
    3
    1 1 1 1 1 1 1 1
    3 2 5 1 2 3 4 10
    4 3 4 3 3 8 10 10
    
    예상 출력
    Case #1: 0
    Case #2: 4
    Case #3: 9