我有一个问题要从SPOJ解决 - 就像平台一样,我无法想出如何解决这个问题。这是问题,用G翻译器翻译,但如果丢失了一些东西,我可以尝试更好地翻译它
该条目给出测试次数T(10 <= T <= 100)。对于每个测试,给出数字N(3 <= N <= 100)。该数字是等边N角(例如,等边五边形,对于N = 5),边长为1.在N-gon的N个顶点中的每一个上都是种子蜗牛。每只蜗牛作为“目标”设置了一只蜗牛到达另一只 - 站在相邻顶点的那只(相邻节点选择的方向始终相同的事实,即每只蜗牛“追逐”只是一只螺丝和每只蜗牛都被一只蜗牛“追逐” - 蜗牛的选择只在开始时只做一次,直到追逐结束时才会改变。在一瞬间,蜗牛开始朝着它的目标移动(在任何时候都与它的目标完全一致)。它持续到所有蜗牛在一个点上没有相互接触为止。为了更好地说明这种情况,请查看下图:
箭头显示了所选目标,每只蜗牛的情况。十字表示所有人彼此接触的大致位置。你的任务是确定每只蜗牛的距离(所有蜗牛都会产生完全相同的距离)。如果结果超过两位小数,则绕过第二个小数位。
总结:
输入
测试次数T
在N的下一个T行中
输出
对于每个测试,在追逐过程中每个蜗牛的距离(结果四舍五入到小数点后两位)。
示例输入:
5
3
5
7
9
91
输出:
0.67
1.45
2.66
4.27
419.69
我希望有人向我解释如何从示例输入中获取所需的输出,并提出一些可以使用的算法。
感谢您提前的时间
答案 0 :(得分:2)
你需要一些物理学。从其中一只蚂蚁的参考框架看它。所以一只蚂蚁总是走向它。现在沿着连接蚂蚁的线的相对速度。这将是v(1-cos(2 * pi)/ N)(解决这个问题。这很容易)
现在,当位移等于边长时,它们相遇。因此,所花费的时间是1 / v(1-cos((2 * pi)/ n))。行进距离为v * t,因此距离为1 /(1-cos((2 * pi)/ N))。
您可以在此处查看直接公式。
答案 1 :(得分:1)
你也可以这样看:蜗牛从正多边形的顶点开始,因为它们都以相同的速度向目标移动,它们将始终保持在正多边形的顶点。因此,从中心到蜗牛的射线与蜗牛的运动方向之间的角度是恒定的。这意味着蜗牛的路径是Logarithmic spirals。
z(t) = e^{ct}
和0之间的对数螺旋|z| = 1
部分的长度为|c|/|Re c|
。
对于给定的情况,c = e^{2π i/N} - 1 = (cos(2π/N) - 1) + i*sin(2π/N)
是(最多缩放)螺旋的参数。
现在|c| = 2*sin(π/N)
和|Re c| = 1 - cos(2π/N) = 2*sin²(π/N)
,因此如果起点和汇点之间的距离为1,则每只蜗牛都会行驶1/sin(π/N)
。但条件是多边形的边是1,而不是中心和顶点之间的距离,所以我们必须缩放。方便的是,如果中心和顶点之间的距离为1,则边长为|c|
,因此对于边长1/|Re c| = 1/(1 - cos(2π/N)
,行进距离的公式简化为1
。 (1)功能
(¹)当然,这与@ sukun007的结果完全相同,只是来源不同。