P16582 [GKS 2016 #B] Watson and Intervals
题目描述
Sherlock 和 Watson 在编程课程中已经掌握了 C++ 语言的复杂性,因此他们开始研究算法问题。在今天的课堂上,老师介绍了合并一维区间的问题。给出了 $N$ 个区间,第 $i$ 个区间由闭端点 $[L_i, R_i]$ 定义,其中 $L_i \le R_i$。
老师将一组区间的**覆盖面积**定义为至少出现在一个区间中的整数的个数。(形式化地说,若存在某个 $j$ 使得 $L_j \le p \le R_j$,则整数 $p$ 对覆盖面积有贡献。)
现在,Watson 总是喜欢挑战 Sherlock。他要求 Sherlock 恰好移除一个区间,使得剩余区间的覆盖面积最小。请帮助 Sherlock 找出在恰好移除 $N$ 个区间中的一个之后,剩余区间的最小可能覆盖面积。
输入格式
每个测试用例由一行八个整数组成:$N$、$L_1$、$R_1$、$A$、$B$、$C_1$、$C_2$ 和 $M$。其中 $N$ 是区间的数量,其余七个值是参数,你需要使用它们来生成其他区间,方法如下:
首先定义 $x_1 = L_1$ 和 $y_1 = R_1$。然后,使用下面的递推式生成 $i = 2$ 到 $N$ 的 $x_i$、$y_i$:
* $x_i = (A \times x_{i-1} + B \times y_{i-1} + C_1) \bmod M$。
* $y_i = (A \times y_{i-1} + B \times x_{i-1} + C_2) \bmod M$。
对于所有 $i = 2$ 到 $N$,我们定义 $L_i = \min(x_i, y_i)$,$R_i = \max(x_i, y_i)$。
输出格式
对于每个测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 是在恰好移除一个区间之后,剩余所有区间的最小可能覆盖面积。
说明/提示
在样例 $1$ 中,使用生成方法得到的区间集合为:$\{[1, 1]\}$。移除唯一的区间后,覆盖面积为 $0$。
在样例 $2$ 中,使用生成方法得到的区间集合为:$\{[2, 5], [3, 5], [4, 7]\}$。移除第一个、第二个或第三个区间后,剩余区间的覆盖面积分别为 $5$、$6$ 和 $4$。
在样例 $3$ 中,使用生成方法得到的区间集合为:$\{[3, 4], [1, 9], [0, 8], [2, 4]\}$。移除第一个、第二个、第三个或第四个区间后,剩余区间的覆盖面积分别为 $10$、$9$、$9$ 和 $10$。
### 限制条件
$1 \le T \le 50$。
$0 \le L_1 \le R_1 \le 10^9$。
$0 \le A \le 10^9$。
$0 \le B \le 10^9$。
$0 \le C_1 \le 10^9$。
$0 \le C_2 \le 10^9$。
$1 \le M \le 10^9$。
**小数据集(测试集 1 – 可见)**
$1 \le N \le 1000$。
**大数据集(测试集 2 – 隐藏)**
$1 \le N \le 5 \times 10^5\ (500000)$。
翻译由 DeepSeek V4 Pro 完成