#P1136. Pendulum

    ID: 137 远端评测题 1000ms 10MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>Southwestern European Regional Contest 1996

Pendulum

本题没有可用的提交语言。

题目描述

想象一个用绳子悬挂在墙上钩子上的钟摆。当推动它时,这个钟摆会来回摆动。现在再想象墙上还有其他钩子,位于钟摆绳子的运动路径上。钟摆的绳子会绕着这些钩子弯曲,甚至可能环绕在它们周围。一般来说,它会遵循比之前复杂得多的路径。过了一段时间后,钟摆的运动将会重复,钟摆会沿着一个周期性的轨道运动。我们希望你做的是计算钟摆在完成一个轨道周期时所经过的距离。

更正式地说,我们在墙上建立一个笛卡尔坐标系。钟摆的绳子固定在原点 (0, 0) 处。和往常一样,x 轴指向右方,y 轴指向上方。钟摆的绳子长度为 r。钟摆从位置 (-r, 0) 处释放,因此开始向右摆动。此外,平面上分布着 n 个额外的钩子,这些钩子可能会影响钟摆的运动路径。

在我们理想的世界中,以下假设成立:

  1. 钩子和绳子的直径为零。
  2. 钟摆不会损失能量(例如由于摩擦)。
  3. 钟摆永远不会撞击到钩子,只有它的绳子会接触到钩子。
  4. 钟摆的绳子是由某种未来材料制成的,这种材料只在接触到钩子的地方弯曲,在其他地方是刚性的。

你的程序应该模拟钟摆的运动,并输出它最终进入的周期性轨道的空间长度。正如你可能从物理学中记得的那样:由于重力的作用,钟摆永远不会达到比它起始高度更高的位置!也就是说,它永远不会高于 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年西南欧洲区域竞赛