CF1840F Railguns
题目描述
Tema 正在玩一个非常有趣的电脑游戏。
在下一关任务中,Tema 的角色来到了一个陌生的星球。与地球不同,这个星球是平的,可以表示为一个 $n \times m$ 的矩形。
Tema 的角色位于坐标 $(0, 0)$。为了顺利完成任务,他需要活着到达坐标 $(n, m)$。
假设游戏角色当前位于坐标 $(i, j)$。从第一秒开始,每一秒,Tema 可以:
- 使用垂直超跳技术,使角色在该秒结束时到达坐标 $(i + 1, j)$;
- 或者使用水平超跳技术,使角色在该秒结束时到达坐标 $(i, j + 1)$;
- 或者选择不进行超跳,此时角色在这一秒内不会移动。
这个星球上的外星人非常危险且充满敌意。因此,他们会用轨道炮射击 $r$ 次。
每次射击会完全贯穿某一条纵坐标或横坐标。如果角色在射击发生时(即在该秒结束时)正好处于被贯穿的坐标线上,他就会死亡。
由于 Tema 查看了游戏的源代码,他知道每次射击的全部信息——射击的时间、被贯穿的坐标以及射击的方向。
请问角色到达目标点 $(n, m)$ 的最短时间是多少?如果他注定无法到达 $(n, m)$,请输出 $-1$。
输入格式
输入的第一行包含一个整数 $T$($1 \le T \le 10^4$),表示测试用例的数量。
接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \cdot m \le 10^4$),表示星球的高度和宽度。
每个测试用例的第二行包含一个整数 $r$($1 \le r \le 100$),表示射击的次数。
接下来有 $r$ 行,每行描述一次射击。
每次射击由三个整数 $t$、$d$、$coord$ 描述。其中 $t$ 表示射击发生的时间($1 \le t \le 10^9$),$d$ 表示射击的方向($d = 1$ 表示横向射击,$d = 2$ 表示纵向射击),$coord$ 表示被贯穿的坐标(若 $d = 1$,则 $0 \le coord \le n$;若 $d = 2$,则 $0 \le coord \le m$)。
所有测试用例中 $n \cdot m$ 的总和不超过 $10^4$。
输出格式
对于每个测试用例,输出一个整数,表示角色到达坐标 $(n, m)$ 的最短时间。如果他注定无法到达,则输出 $-1$。
说明/提示
在第一个测试用例中,角色可以按如下方式移动:$(0, 0) \rightarrow (0, 1) \rightarrow (0, 2) \rightarrow (0, 3) \rightarrow (0, 3) \rightarrow (1, 3)$。
在第二个测试用例中,角色无法离开在第 $2$ 秒被完全贯穿的矩形区域。
由 ChatGPT 4.1 翻译