QOJ.ac

QOJ

Límite de tiempo: 0.5 s Límite de memoria: 1024 MB Puntuación total: 100

#10527. 太空高尔夫

Estadísticas

你一定从未听说过这个新的行星表面探测计划,因为它是在极度保密的情况下进行的。该计划旨在通过使用被称为“观测弹”的投射式设备,大幅降低传统漫游车式移动探测器的成本。

子弹本身没有任何主动移动能力,这也是它们具有成本效益的主要原因。每颗子弹在发射器上以给定的初速度射出后,会沿着抛物线轨迹飞行,直到触地。它会在表面反弹并形成另一条抛物线轨迹。这个过程可以近乎无限地重复。

我们希望每颗子弹都能通过调整其初速度,精确地反弹在行星表面上感兴趣的特定点。子弹中的各种传感器可以在反弹的瞬间收集有价值的数据,并将其发送到观测基地。虽然这听起来像是传统的打靶练习,但有几个问题使得这个问题更加困难。

  • 在发射器和目标点之间可能存在一些障碍物。障碍物直立且非常薄,我们可以忽略它们的宽度。一旦子弹触碰到任何障碍物,我们就无法确定它随后的轨迹。因此,我们必须规划发射路径以避开这些障碍物。
  • 以足够高的速度几乎垂直地发射子弹,我们可以很容易地让它在不触碰任何障碍物的情况下击中目标,但提供高初速度是消耗能量的。能量在太空探索中极其宝贵,因此应尽量减小子弹的初速度。让子弹反弹多次可能使子弹以较低的初速度到达目标。
  • 然而,子弹反弹的次数不得超过给定的次数。虽然子弹的弹体制造得足够坚固,但内部的一些传感器可能无法承受反复的冲击。允许的反弹次数因观测弹的类型而异。

你被召集来为该项目提供工程协助,编写一个智能程序,计算完成任务所需的最小初速度。

图 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

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.