QOJ.ac

QOJ

実行時間制限: 1.0 s メモリ制限: 256 MB 満点: 100 ハック可能 ✓

#10919. 滑翔

統計

Link 喜欢各种酷炫的挑战,比如穿过小孔射箭、从 3000 米高的雪山上滑下,以及用巨大的叶子演奏音乐。现在,他正在尝试一项新的挑战:在不沉入湖中的情况下滑翔穿过一个湖泊。

Link 的世界是一个三维空间,我们定义一个笛卡尔坐标系 $(x, y, z)$,其中 $z$ 为高度。水面是平面 $z = 0$。Link 从位置 $(s_x, s_y, 0)$ 出发,目的地是 $(t_x, t_y, 0)$。如果他在任何时刻的高度 $z$ 严格小于 $0$(即 $z < 0$),则意味着他掉进了水里,挑战失败。

在 Link 的世界里,与地球不同,物体在空中以恒定的速度 $v_f$ 自由落体。在如此快的下落速度下,Link 无法控制自己的身体,只能以零水平速度垂直下落。幸运的是,Link 有一个滑翔伞可以减缓下落速度。一旦他打开滑翔伞,下落速度就会变为 $v_p$ ($v_p < v_f$),并且 Link 能够以不超过 $v_h$ 的速度在任何方向上进行水平移动。形式上,Link 在 $x$ 方向的速度 $v_x$ 和在 $y$ 方向的速度 $v_y$ 应满足 $\sqrt{v_x^2 + v_y^2} \le v_h$。Link 可以随时打开或关闭滑翔伞,次数不限。

对 Link 来说更好的是,湖中有 $n + 1$ 个奇异的风洞,产生向上的风,帮助 Link 升得更高。这些风洞编号为 $0$ 到 $n$,由元组 $(x_i, y_i, v_i)$ 描述,其中 $i = 0, 1, \dots, n$。第 $i$ 个风洞的位置是 $(x_i, y_i, 0)$,其向上风的速度为 $v_i$。Link 必须位于垂直线 $[x = x_i, y = y_i]$ 上,且必须打开滑翔伞才能受到第 $i$ 个风洞的影响。如果 Link 在第 $i$ 个风洞上方打开滑翔伞,他将以 $v_i - v_p$ 的速度上升(若 $v_i > v_p$),或以 $v_p - v_i$ 的速度下降(若 $v_p > v_i$),或在 $v_p = v_i$ 时保持垂直速度为零。Link 出发的位置是第 $0$ 号风洞,这意味着 $s_x = x_0, s_y = y_0$。Link 精心选择了这个位置,使得 $v_0 > v_p$,这意味着他最初可以升到任意高度。因此,可以证明,只要时间足够,Link 总能到达目的地而不掉进湖里。

Link 打开和关闭滑翔伞的时间,以及改变速度的时间可以忽略不计。Link 想知道到达目的地所需的最短时间。

输入格式

输入包含多个测试用例。输入的第一行包含一个正整数 $T$,表示测试用例的数量。

对于每个测试用例,第一行包含四个整数 $s_x, s_y, t_x, t_y$ ($-10^4 \le s_x, s_y, t_x, t_y \le 10^4$),描述起点和终点的坐标。第二行包含三个整数 $v_f, v_p, v_h$ ($0 < v_p < v_f \le 10^4, 0 < v_h \le 10^4$),分别表示自由落体速度、打开滑翔伞后的下落速度以及最大水平速度。第三行包含一个正整数 $n$ ($n \le 4000$),表示除起点外的风洞数量。接下来的 $n + 1$ 行,每行包含三个整数 $x_i, y_i, v_i$ ($-10^4 \le x_i, y_i \le 10^4, 0 < v_i \le 10^4, i = 0, 1, \dots, n$),表示每个风洞的位置和风速。保证没有两个风洞位于同一位置,且目的地没有风洞。

保证 $x_0 = s_x, y_0 = s_y, v_0 > v_p$,且所有测试用例的 $n$ 之和不超过 $10^4$。

输出格式

对于每个测试用例,输出一行一个数字,表示在不掉入湖中的前提下到达 $(t_x, t_y, 0)$ 所需的最短时间。如果你的答案的绝对误差或相对误差不超过 $10^{-9}$,则该答案将被接受。

样例

样例输入 1

2
0 0 3 4
5 4 1
1
0 0 5
3 0 6
0 0 3 4
5 4 1
1
0 0 5
3 0 7

样例输出 1

25.000000000000000
24.333333333333332

说明

在第一个样例中,Link 在 $(0, 0, 0)$ 处打开滑翔伞并等待 20 秒,使他上升到 20 个单位的高度。然后他直线移动到 $(3, 4, 0)$,花费 5 秒到达。

在第二个样例中,Link 首先上升到 12 个单位的高度,然后直线移动到 $(3, 0, 0)$,这花费了他 15 秒。然后他上升到 16 个单位的高度,并直线移动到目的地,这花费了 $\frac{28}{3}$ 秒。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.