#P16626. [GKS 2017 #D] Trash
[GKS 2017 #D] Trash
题目描述
Bob 是一位出色的 Google 员工。他追求效率,因此每件事都做得又快又好。今天,Bob 发现自己办公桌旁的垃圾桶不见了!不幸的是,这意味着他必须改用附近另一个垃圾桶。由于离开座位去丢垃圾会降低他的工作效率,Bob 决定将垃圾直接扔进那个垃圾桶!
但是 Google 办公室中有很多障碍物。例如,如果扔出的垃圾砸到人、墙壁或其他任何东西,都是不礼貌的行为。Bob 希望扔出的垃圾不碰到任何现有的障碍物。
为简化问题,我们只考虑包含 Bob 和垃圾桶的竖直平面。Bob 位于点 ,垃圾桶位于点 。此外,办公室中有 个障碍物,每个障碍物是一个点,第 个障碍物的坐标为 。办公室的天花板是一条直线,在平面中的表达式为 。由于 Bob 在一座新型高科技悬浮办公室中,本题不考虑办公室的地面,你无需担心与地面的碰撞。Bob 会扔出一块半径为 的圆形垃圾。垃圾的圆心从 出发。当垃圾被抛出时,其圆心必须沿着一条抛物线轨迹运动,表达式为 ,其中 ,且 可以是任意小于等于 的实数。只有当垃圾的圆心到达垃圾桶所在点时,才认为垃圾已抛出,仅垃圾的一部分触碰到该点是不够的。
Bob 想知道:在不碰到天花板和任何障碍物的前提下,他能扔出的最大垃圾半径是多少?即,我们需要找到最大的 ,使得存在至少一个 满足以下条件:对于任意 ,点 与 之间的欧几里得距离大于 ;并且对于每个 ,点 与 之间的欧几里得距离大于等于 。
输入格式
输入的第一行包含一个整数 ,表示测试用例的数量。接下来有 个测试用例。每个测试用例的第一行包含三个整数 、 和 :障碍物的数量、垃圾桶的 坐标以及天花板的高度。随后有 行,其中第 行表示第 个障碍物,包含两个整数 和 ,表示该障碍物的坐标。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是一个浮点数,表示最大半径 。如果答案与正确答案的绝对误差或相对误差在 以内,则认为正确。
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 位于 ,垃圾桶位于 。有一个障碍物位于点 ,用星号标记。如果 Bob 从障碍物上方扔垃圾,最大 约为 ,此时 约为 。如果 Bob 从障碍物下方扔垃圾,最大 为 ,此时 。因此该样例的最大 约为 。
:::align{center}
:::
样例 #2 与样例 #1 类似,但障碍物升高了 1 个单位。此时,如果 Bob 从障碍物下方扔垃圾,最大 为 (对应 )。如果他从障碍物上方扔垃圾,最大 仅约为 (对应 )。因此该样例的最大 为 。
限制条件
。
。
。
。
。
小数据集(测试集 1 – 可见)
。
大数据集(测试集 2 – 隐藏)
。
翻译由 DeepSeek V4 Pro 完成