#P16648. [GKS 2018 #D] Paragliding
[GKS 2018 #D] Paragliding
题目描述
:::align{center}
:::
为了在击败邪恶的 Graphendorf 的征途中前进,我们的英雄 Edge 必须在一座神殿中克服一项挑战。神殿位于 xy 平面中的二维空间,沿 x 轴竖立着 座高度各不相同的塔。每座塔可以用二维平面中的一条垂直线段表示。对于第 座塔,塔的底部位于 ,塔的顶部位于 。此外,还有 个气球漂浮在平面中。每个气球可以用二维平面中的一个点表示,第 个气球位于 。Edge 必须在这项挑战中收集尽可能多的气球。
幸运的是,Edge 有一个可靠的运动滑翔伞,是他在神殿另一个房间中找到的。他可以选择爬上任意一座塔,并从塔上的任意位置向 x 轴的正方向或负方向滑翔下降。当他滑翔时,他沿着一条与塔身成 度角的直线路径下降。Edge 在从塔上滑下时,可以收集沿途的任何气球。他可以重复这个过程,任意多次地爬上塔并跳下。如果他在下降过程中碰到一座塔,那么我们认为他在该点位于塔上并可以开始攀爬。你可以假设 Edge 是 xy 平面中的一个点。
借助一副由古代科技制成的护目镜,Edge 能够得知每座塔和每个气球的高度与位置。有了这些信息,你能帮助 Edge 推算出他在这座神殿中最多可以收集多少个气球吗?
输入格式
输入的第一行给出测试用例的数量 。接下来有 个测试用例。每个测试用例包含五行。第一行包含上述的整数 和 。接下来的四行各自描述一个用于生成塔的位置、高度以及气球的 、 坐标的递推式。这四行的格式如下,每行包含六个整数:
为了生成 ( 到 )、( 到 )、( 到 )和 ( 到 )的值,我们使用以下递推式:
- 对于 到 :$p_i = (A_1 \times p_{i-1} + B_1 \times p_{i-2} + C_1) \bmod M_1 + 1$。
- 对于 到 :$h_i = (A_2 \times h_{i-1} + B_2 \times h_{i-2} + C_2) \bmod M_2 + 1$。
- 对于 到 :$x_i = (A_3 \times x_{i-1} + B_3 \times x_{i-2} + C_3) \bmod M_3 + 1$。
- 对于 到 :$y_i = (A_4 \times y_{i-1} + B_4 \times y_{i-2} + C_4) \bmod M_4 + 1$。
保证没有两座塔的位置相同。然而,塔与气球有可能重叠。在这种情况下,我们认为气球可以被收集。注意,多个气球可能共享同一个点;此时,Edge 经过该点即可同时收集所有这些气球。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是 Edge 可以收集到的最大气球数量。
2
3 2
1 4 1 1 0 11
4 1 1 1 8 11
2 5 0 0 0 11
4 1 0 0 0 11
5 5
2 4 1 0 1 13
4 4 0 1 12 13
1 4 1 1 0 13
3 5 1 1 7 13
Case #1: 1
Case #2: 4
提示
注意,样例 #1 的输入生成的就是题目描述中所描绘的场景。生成的数组为:
在样例 #2 中,生成的数组为:
限制条件
。
对于 到 ,。
对于 到 ,。
对于 到 ,。
对于 到 ,。
。
。
。
。
对于 到 ,,有 。
小数据集(测试集 1 – 可见)
。
。
大数据集(测试集 2 – 隐藏)
。
。
翻译由 DeepSeek V4 Pro 完成