「SFMOI Round I」Strange Dino Game
题目背景
[English statement](https://www.luogu.com.cn/problem/T517979). **You must submit your code at the Chinese version of the statement.**
![](https://cdn.luogu.com.cn/upload/image_hosting/59joca92.png?x-oss-process=image/resize,m_lfit,h_600)
![](https://cdn.luogu.com.cn/upload/image_hosting/iyhol5l6.png?x-oss-process=image/resize,m_lfit,h_600)
Watersphere 同学在家没网了,只好玩起了 dino 游戏,但是他很菜,一玩到后面就头晕眼花,所以想让你编个程序帮助他拿到更高分,于是有了这题。
本题的游戏背景是 [Dino](https://dinosaur.game)。可以考虑点击链接游玩,以便更好理解题意。
题目描述
我们将问题放在二维平面上描述。我们给出一些游戏要素:
- 玩家:Dino。可以将其视为一个点。
- 障碍物:
- 仙人掌:形如 $(x_i',0),(x_i',h_i)$ 的线段。
- 飞鸟:形如 $(x_i,d_i),(x_i,u_i)$ 的线段。
- 游戏结束:Dino 与障碍物上的任意一点(包括线段端点)重合时,游戏结束。
- 起点:原点 $(0,0)$。
- 终点:使游戏结束的位置,位于第一象限(或 $x$ 轴上)。可能不存在(即游戏能无限进行)。
- 游戏分数:终点的 $x$ 坐标。终点不存在时定义为无穷大。
- 跳跃参数:正整数 $d,h$。
- 步行:Dino 在 $x$ 轴上沿着 $x$ 轴正方向移动。
- 跳跃:当 Dino 在 $x$ 轴上时,可以进行一次跳跃。以起跳点为原点,跳跃轨迹为
$$f(x) = \begin{cases}
\displaystyle \frac{h}{d}x & x\in [0, d) \\
\displaystyle-\frac{h}{d}x+2h & x\in [d, 2d) \\
\end{cases}$$
- 需要注意的是,由上述定义可以推出:**在一次跳跃后落地的瞬间进行第二次跳跃是合法的。**
- 需要注意的是,可以在任意**实数点**(只要在 $x$ 轴上)处开始跳跃。也就是说,跳跃不一定在整点开始。
下图展示了 $d=2,h=6$ 时的一次跳跃。
![](https://cdn.luogu.com.cn/upload/image_hosting/1gxrno9x.png?x-oss-process=image/resize,m_lfit,h_400)
在一局游戏中,Dino 从起点出发向 $x$ 轴正方向移动。目标是最大化得分,即尽量避开障碍物,使自己移动的距离尽量长。
每一时刻,Dino 只能做一件事:步行,或跳跃。当且仅当 Dino 在 $x$ 轴上时可以进行跳跃。
形式化地说,Dino 的行为可以被描述为一个长度为 $(k+1)$ 的实数二元组序列 $[(x_0,t_0),(x_1,t_1),\cdots,(x_k,t_k)]$,满足:
- $x_0=0$;
- $t_i\in \{0,1\}$;
- $\forall 0\le i\lt k$, $x_i\lt x_{i+1}$;
- $t_i=1,i\lt k\implies x_{i+1}-x_i\ge 2d$;(二段跳是不允许的)
- $\forall 0\le i\lt k$, $t_i=t_{i+1}\implies t_i=t_{i+1}=1$。
当 $t_i=0$ 时,我们定义 Dino 在 $x_i$ **进入步行状态**,否则定义 Dino 在 $x_i$ **进入跳跃状态**。
当 Dino 与障碍物重合时,游戏结束。此时 Dino 在的位置为终点,得分为终点的 $x$ 坐标。
已知有 $b$ 只飞鸟和 $c$ 个仙人掌,求出 Dino 的最大得分。特别地,得分可以为无穷大。
可参阅样例解释的图片。
输入输出格式
输入格式
**本题单个测试点内有多组测试数据。**
第一行,一个正整数 $T$,代表游戏次数。
接下来依次描述 $T$ 组数据:
- 每组数据第一行,两个正整数 $d,h$,表示 dino 的跳跃参数。
- 每组数据第二行,两个整数 $b,c$,表示飞鸟个数与仙人掌个数。
- 接下来 $b$ 行,每行三个正整数 $x_{i},u_i,d_i$,描述第 $i$ 只飞鸟。
- 接下来 $c$ 行,每行两个正整数 $x'_{i},h_{i}$,描述第 $i$ 株仙人掌。
输出格式
对于每组数据输出一行,表示得分的最大值。
特别地,如果得分为正无穷,输出 `Dino!`。
输入输出样例
输入样例 #1
2
1 3
1 2
1 2 1
2 2
3 2
1000000000 1000000000
1 0
114514 1919 810
输出样例 #1
3
Dino!
输入样例 #2
1
8 16
8 3
5 18 13
4 20 10
6 13 1
2 17 11
1 11 6
5 1 1
2 6 3
1 16 1
7 20
7 13
3 2
输出样例 #2
6
输入样例 #3
1
5 5
1 2
5 5 1
6 1
16 3
输出样例 #3
16
输入样例 #4
1
5 5
1 4
19 10 8
4 1
15 1
22 2
20 1
输出样例 #4
22
说明
样例 $1$ 解释:
- 对于第 $1$ 组数据,dino 无论如何也无法跳过连续的两株高为 $2$ 的仙人掌,答案即为第二株仙人掌的 $x$ 轴坐标。
- 对于第 $2$ 组数据,dino 可以在原点直接起跳跳过唯一的一只鸟,也完全可以不起跳从飞鸟下方走过。
其中第一组数据的解释如下所示,红线代表飞鸟,绿线代表仙人掌,粉线代表 Dino 的轨迹。
![](https://cdn.luogu.com.cn/upload/image_hosting/ge17so5a.png?x-oss-process=image/resize,m_lfit,h_400)
### 数据范围
**本题采用捆绑测试。**
- Subtask 1(5 pts):$c=0$;
- Subtask 2(5 pts):$b,c \le 10$;
- Subtask 3(20 pts):$b=0$;
- Subtask 4(20 pts):$1 \le d,h,x_{b_i},d_i,u_i,x_i',h_i \le 10^5$;
- Subtask 5(40 pts):无特殊限制。
- Subtask 6(10 pts):无特殊限制。
对于 $100\%$ 的数据,保证:
- $1 \le T \le 10$;
- $0 \le b,c \le 2\times 10^4$;
- $1 \le d,h,x_{b_i},d_i,u_i,x_i',h_i\le 10^9$;
- $d_i\le u_i$。