pta错题--攀岩

L3-039 攀岩

分数 30

全屏浏览

切换布局

作者 吉如一

单位 北京大学

九条可怜最近接触到了攀岩这项运动。作为一名运动量接近为零的家里蹲,相比于动手攀岩,可怜显然更加享受攀岩运动中动脑的部分,即对攀岩路线的规划。
为了只动脑,可怜设计了一个简易的攀岩机器人来帮她动手。这个机器人由一个核心(大小可以忽略不计)和三个长度至多为 r 的可伸缩机械臂组成,如下图所示:

robot.png

一面攀岩墙可以看成一个二维的无穷平面,上面有 n 个不同位置的岩点 p1​,…,pn​。在攀岩开始时,机器人的两个机械臂需要分别抓住岩点 p1​ 和 p2​,而其核心和第三个机械臂可以在任意位置。攀岩的目标是让机器人有两支机械臂同时抓握住岩点 pn​。
在攀岩过程中,机器人需要保证每时每刻都有两支机械臂抓握住两个不同的岩点。在满足这点的情况下,机器人可以在机械臂长度允许的情况下进行如下移动:

  1. 连续地将核心的位置从当前位置移动到任意位置。
  2. 用第三条机械臂抓握住一个岩点(可以与某条其他机械臂抓住相同的岩点)。
  3. 让一条机械臂松开其抓握的岩点。注意,只有当另外两条机械臂已经抓握住不同岩点时,才能进行这项操作。

注:我们假设岩点的大小是无穷小,不会影响机器人的移动,比如机械臂、核心轨迹都可以经过岩点。
下面是一个攀岩过程的例子,假设平面上有四个岩点,坐标分别是 (0,0),(1,0),(0,1),(1,2),则下面展示了一个 r=2​ 时,即机械臂长度至多为 2​ 时的攀岩方案。

steps.jpg

  1. 初始时,可怜将机器人的核心放在 (0.5,0) 处,第三根手臂随意地放在 (1,1) 处。
  2. 机器人的第三机械臂抓握住岩点 p3​。
  3. 机器人的第二机械臂松开,并移动到 (1,0.5) 处。
  4. 机器人的核心移动至 (1,1),此时第一机械臂的长度到达极限 2​。
  5. 机器人的第二机械臂抓握住岩点 p4​。
  6. 机器人的第一机械臂松开,并抓握住岩点 p4​,完成攀岩目标。

显然,机器人的机械臂长度越短,对可怜的路径规划能力要求越高。但是这个机械臂的长度也不能太短,不然机器人可能无论如何都无法完成攀岩任务。比如在上述任务中,如果机械臂长度小于 0.5,那么机器人将无法同时抓握 p1​ 和 p2​,这意味着它连开始攀岩都无法做到,更别说完成攀岩任务了。
因此,为了在合理范围内尽可能地挑战自己的大脑,可怜希望你对于攀岩馆中的每一项攀岩任务,都帮她计算(在可能完成攀岩任务的前提下)机械臂的最短长度是多少。

输入格式:

第一行输入一个整数 t (t≤100),表示攀岩馆内攀岩任务的数量。
每个任务的第一行都是一个整数 n (3≤n≤1500),表示攀岩任务涉及的岩点数量。
接下来 n 行,每行两个整数 (xi​,yi​),表示第 i 个岩点的坐标。输入保证 0≤xi​,yi​≤106 且同一个攀岩任务中的岩点坐标两两不同。
输入保证满足 n>100 的数据不超过 3 组。

输出格式:

对于每个攀岩任务输出一行一个浮点数,表示最短可能的机械臂长度。你的答案在绝对误差或者相对误差不超过 10−6 的情况下都会被视为正确。

输入样例:

4
4
0 0
1 0
0 1
1 2
4
0 0
2 0
0 3
2 2
7
0 0
1 0
2 0
2 1
2 2
1 2
0 2
15
13 2
13 3
12 44
6 17
4 71
14 58
4 49
2 51
8 37
1 18
5 43
5 35
1 84
10 23
13 69

输出样例:

0.99999999498
1.41421355524
1.00000000498
10.13227667717

样例解释

第一组数据和题面中的攀岩任务一致,其最小机械臂长度为 1,而样例输出的答案在 10−6 的误差范围内,故会被视为正确。
下面给出了一个机械臂长度为 1 时的攀岩方案。攀岩开始时,机器人的核心与岩点 p1​ 重叠,第三机械臂在长度为 0 的情况下抓住了这个岩点,且第一机械臂额外抓住了岩点 p3​。接着,第三机械臂松开岩点 p1​,并随着核心移动至点 (1,1)。然后,第三机械臂伸出并抓握住岩点 p4​。最后,第二机械臂松开岩点 p2​ 并同样抓握住岩点 p4​,完成攀岩任务。

屏幕截图 2024-04-19 100157.jpg

第二组数据中,最小机械臂长度为 2​,下图展示了一个对应的攀岩方案。攀岩开始时,机器人的核心位于 (1,1) 且三个机械臂分别抓握住岩点 p1​,p2​ 和 p4​。随后,第二机械臂松开点 p2​ 并抓握住岩点 p4​,完成攀岩任务。注意到此攀岩方案全程没有使用岩点 p3​,这也是被允许的:攀岩任务中不要求使用所有的岩点

屏幕截图 2024-04-19 100514.jpg

代码长度限制

16 KB

时间限制

4000 ms

内存限制

512 MB

栈限制

8192 KB

  • 31
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值