你一定从未听说过这个新的行星表面探测计划,因为它是在极度保密的情况下进行的。该计划旨在通过使用被称为“观测弹”的投射式设备,大幅降低传统漫游车式移动探测器的成本。
子弹本身没有任何主动移动能力,这也是它们具有成本效益的主要原因。每颗子弹在发射器上以给定的初速度射出后,会沿着抛物线轨迹飞行,直到触地。它会在表面反弹并形成另一条抛物线轨迹。这个过程可以近乎无限地重复。
我们希望每颗子弹都能通过调整其初速度,精确地反弹在行星表面上感兴趣的特定点。子弹中的各种传感器可以在反弹的瞬间收集有价值的数据,并将其发送到观测基地。虽然这听起来像是传统的打靶练习,但有几个问题使得这个问题更加困难。
- 在发射器和目标点之间可能存在一些障碍物。障碍物直立且非常薄,我们可以忽略它们的宽度。一旦子弹触碰到任何障碍物,我们就无法确定它随后的轨迹。因此,我们必须规划发射路径以避开这些障碍物。
- 以足够高的速度几乎垂直地发射子弹,我们可以很容易地让它在不触碰任何障碍物的情况下击中目标,但提供高初速度是消耗能量的。能量在太空探索中极其宝贵,因此应尽量减小子弹的初速度。让子弹反弹多次可能使子弹以较低的初速度到达目标。
- 然而,子弹反弹的次数不得超过给定的次数。虽然子弹的弹体制造得足够坚固,但内部的一些传感器可能无法承受反复的冲击。允许的反弹次数因观测弹的类型而异。
你被召集来为该项目提供工程协助,编写一个智能程序,计算完成任务所需的最小初速度。
图 D.1 给出了一个情况的草图,大致对应于下面给出的样例输入 4 的情况。
图 D.1. 一个样例情况
你可以假设以下内容:
- 行星的大气层非常稀薄,可以忽略大气阻力。
- 行星足够大,其表面可以近似为一个完全平坦的平面。
- 重力加速度在子弹能达到的最高点之前可以近似为常数。
这意味着子弹沿着完美的抛物线轨迹飞行。
你还可以假设以下内容:
- 行星表面和子弹制造得非常坚硬,因此反弹可以近似为弹性碰撞。换句话说,可以忽略反弹时的动能损失。由于我们也可以忽略大气阻力,子弹反弹后的速度等于其发射后的速度。
- 子弹制造得足够紧凑,可以忽略其尺寸。
- 发射器也制造得足够紧凑,可以忽略其高度。
你,一位编程天才,可能不是物理学专家。让我们回顾一下刚体动力学的基本知识。
我们在此用水平分量 $v_x$ 和垂直分量 $v_y$(正值表示向上)来描述子弹的速度 $v$。初速度具有分量 $v_{ix}$ 和 $v_{iy}$,即在子弹发射后立即有 $v_x = v_{ix}$ 和 $v_y = v_{iy}$。我们用 $x$ 表示子弹距发射器的水平距离,用 $y$ 表示其在时间 $t$ 的高度。
- 当忽略大气阻力时,子弹的水平速度分量在飞行过程中保持不变。因此,距发射器的水平距离与经过的时间成正比。 $$x = v_{ix}t \quad (1)$$
- 垂直速度分量 $v_y$ 受重力逐渐减速。在重力加速度 $g$ 的作用下,飞行过程中满足以下微分方程。 $$\frac{dv_y}{dt} = -g \quad (2)$$ 在 $t=0$ 时,初始条件为 $v_y = v_{iy}$ 和 $y=0$,求解该方程可得: $$y = -\frac{1}{2}gt^2 + v_{iy}t \quad (3)$$ $$= -\left(\frac{1}{2}gt - v_{iy}\right)t \quad (4)$$ 方程 (4) 表明,当 $t = 2v_{iy}/g$ 时,子弹再次到达地面。因此,反弹点距发射器的距离为 $2v_{ix}v_{iy}/g$。换句话说,要使子弹飞行距离 $l$,初速度的两个分量应满足 $2v_{ix}v_{iy} = lg$。
- 从上述联立方程中消去参数 $t$,我们得到描述子弹抛物线轨迹的以下方程: $$y = -\left(\frac{g}{2v_{ix}^2}\right)x^2 + \left(\frac{v_{iy}}{v_{ix}}\right)x \quad (5)$$
为了计算方便,本项目使用了一个特殊的单位制,根据该单位制,行星的重力加速度 $g$ 精确为 $1.0$。
输入格式
输入包含单个测试用例,格式如下:
$d \ n \ b$ $p_1 \ h_1$ $p_2 \ h_2$ $\vdots$ $p_n \ h_n$
第一行包含三个整数 $d, n, b$。其中,$d$ 是从发射器到目标点的距离 ($1 \le d \le 10000$),$n$ 是障碍物的数量 ($1 \le n \le 10$),$b$ 是允许的最大反弹次数,不包括在目标点处的反弹 ($0 \le b \le 15$)。
接下来的 $n$ 行,每行有两个整数。在第 $k$ 行中,$p_k$ 是第 $k$ 个障碍物的位置(其距发射器的距离),$h_k$ 是其离地面的高度。你可以假设 $0 < p_1$,$p_k < p_{k+1}$(对于 $k = 1, \dots, n-1$),且 $p_n < d$。你还可以假设 $1 \le h_k \le 10000$(对于 $k = 1, \dots, n$)。
输出格式
输出使子弹到达目标的最小可能初速度 $v_i$。子弹的初速度 $v_i$ 定义如下:
$$v_i = \sqrt{v_{ix}^2 + v_{iy}^2}$$
输出的误差不应超过 $0.0001$。
样例
样例输入 1
100 1 0 50 100
样例输出 1
14.57738
样例输入 2
10 1 0 4 2
样例输出 2
3.16228
样例输入 3
100 4 3 20 10 30 10 40 10 50 10
样例输出 3
7.78175
样例输入 4
343 3 2 56 42 190 27 286 34
样例输出 4
11.08710