#P1136. Pendulum
Pendulum
本题没有可用的提交语言。
题目描述
想象一个用绳子悬挂在墙上钩子上的钟摆。当推动它时,这个钟摆会来回摆动。现在再想象墙上还有其他钩子,位于钟摆绳子的运动路径上。钟摆的绳子会绕着这些钩子弯曲,甚至可能环绕在它们周围。一般来说,它会遵循比之前复杂得多的路径。过了一段时间后,钟摆的运动将会重复,钟摆会沿着一个周期性的轨道运动。我们希望你做的是计算钟摆在完成一个轨道周期时所经过的距离。
更正式地说,我们在墙上建立一个笛卡尔坐标系。钟摆的绳子固定在原点 (0, 0) 处。和往常一样,x 轴指向右方,y 轴指向上方。钟摆的绳子长度为 r
。钟摆从位置 (-r
, 0) 处释放,因此开始向右摆动。此外,平面上分布着 n
个额外的钩子,这些钩子可能会影响钟摆的运动路径。
在我们理想的世界中,以下假设成立:
- 钩子和绳子的直径为零。
- 钟摆不会损失能量(例如由于摩擦)。
- 钟摆永远不会撞击到钩子,只有它的绳子会接触到钩子。
- 钟摆的绳子是由某种未来材料制成的,这种材料只在接触到钩子的地方弯曲,在其他地方是刚性的。
你的程序应该模拟钟摆的运动,并输出它最终进入的周期性轨道的空间长度。正如你可能从物理学中记得的那样:由于重力的作用,钟摆永远不会达到比它起始高度更高的位置!也就是说,它永远不会高于 x 轴。它要么再次达到其初始高度,要么围绕墙上的一个钩子无限循环。
输入格式
输入文件包含多个测试用例。每个用例以一行开头,该行包含一个整数 n
(钩子的数量,1 <= n
< 500)和一个实数 r
(钟摆绳子的长度)。接下来的 n
行,每行包含两个整数,指定相应钩子的 x
坐标和 y
坐标。
文件以一个 r
= 0 的用例结束,这个用例不需要处理。
输出格式
对于每个用例,输出一行,包含用例的编号(“Pendulum #1”、“Pendulum #2” 等)。
然后打印一行,该行包含钟摆在完成其周期性轨道的一个周期时所经过的距离。不要计算到达轨道起点所经过的距离。(请遵循输出示例中显示的格式)。距离应精确到小数点后两位。
在每个测试用例之后输出一个空行。
2 16.0
3 -4
-3 -4
1 18.0
5 -12
0 0
Pendulum #1
Length of periodic orbit = 87.66
Pendulum #2
Length of periodic orbit = 31.42
来源
1996年西南欧洲区域竞赛