#P16626. [GKS 2017 #D] Trash

    ID: 18982 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>数学计算几何2017Special JudgeGoogle Kick Start

[GKS 2017 #D] Trash

题目描述

Bob 是一位出色的 Google 员工。他追求效率,因此每件事都做得又快又好。今天,Bob 发现自己办公桌旁的垃圾桶不见了!不幸的是,这意味着他必须改用附近另一个垃圾桶。由于离开座位去丢垃圾会降低他的工作效率,Bob 决定将垃圾直接扔进那个垃圾桶!

但是 Google 办公室中有很多障碍物。例如,如果扔出的垃圾砸到人、墙壁或其他任何东西,都是不礼貌的行为。Bob 希望扔出的垃圾不碰到任何现有的障碍物。

为简化问题,我们只考虑包含 Bob 和垃圾桶的竖直平面。Bob 位于点 (0,0)(0, 0),垃圾桶位于点 (P,0)(P, 0)。此外,办公室中有 NN 个障碍物,每个障碍物是一个点,第 ii 个障碍物的坐标为 (Xi,Yi)(X_i, Y_i)。办公室的天花板是一条直线,在平面中的表达式为 y=Hy = H。由于 Bob 在一座新型高科技悬浮办公室中,本题不考虑办公室的地面,你无需担心与地面的碰撞。Bob 会扔出一块半径为 RR 的圆形垃圾。垃圾的圆心从 (0,0)(0, 0) 出发。当垃圾被抛出时,其圆心必须沿着一条抛物线轨迹运动,表达式为 f(x)=ax(xP)f(x) = a x (x - P),其中 0xP0 \le x \le P,且 aa 可以是任意小于等于 00 的实数。只有当垃圾的圆心到达垃圾桶所在点时,才认为垃圾已抛出,仅垃圾的一部分触碰到该点是不够的。

Bob 想知道:在不碰到天花板和任何障碍物的前提下,他能扔出的最大垃圾半径是多少?即,我们需要找到最大的 RR,使得存在至少一个 aa 满足以下条件:对于任意 0xP0 \le x \le P,点 (x,f(x))(x, f(x))(x,H)(x, H) 之间的欧几里得距离大于 RR;并且对于每个 ii,点 (x,f(x))(x, f(x))(Xi,Yi)(X_i, Y_i) 之间的欧几里得距离大于等于 RR

输入格式

输入的第一行包含一个整数 TT,表示测试用例的数量。接下来有 TT 个测试用例。每个测试用例的第一行包含三个整数 NNPPHH:障碍物的数量、垃圾桶的 xx 坐标以及天花板的高度。随后有 NN 行,其中第 ii 行表示第 ii 个障碍物,包含两个整数 XiX_iYiY_i,表示该障碍物的坐标。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是一个浮点数,表示最大半径 RR。如果答案与正确答案的绝对误差或相对误差在 10410^{-4} 以内,则认为正确。

4
1 10 10
5 3
1 10 10
5 4
1 100 10
50 3
2 10 10
4 2
6 7
Case #1: 3.23874149472
Case #2: 4.0
Case #3: 3.5
Case #4: 2.23145912401

提示

请注意,最后一个样例不会出现在小数据集中。

下图展示了样例 #1 的情况。Bob 位于 (0,0)(0, 0),垃圾桶位于 (10,0)(10, 0)。有一个障碍物位于点 (5,3)(5, 3),用星号标记。如果 Bob 从障碍物上方扔垃圾,最大 RR 约为 3.23873.2387,此时 aa 约为 0.2705-0.2705。如果 Bob 从障碍物下方扔垃圾,最大 RR33,此时 a=0a = 0。因此该样例的最大 RR 约为 3.23873.2387

:::align{center} :::

样例 #2 与样例 #1 类似,但障碍物升高了 1 个单位。此时,如果 Bob 从障碍物下方扔垃圾,最大 RR44(对应 a=0a = 0)。如果他从障碍物上方扔垃圾,最大 RR 仅约为 2.83062.8306(对应 a=0.4a = -0.4)。因此该样例的最大 RR44

限制条件

1T501 \le T \le 50

2P10002 \le P \le 1000

2H10002 \le H \le 1000

0<Xi<P0 < X_i < P

0<Yi<H0 < Y_i < H

小数据集(测试集 1 – 可见)

N=1N = 1

大数据集(测试集 2 – 隐藏)

1N101 \le N \le 10

翻译由 DeepSeek V4 Pro 完成