最近我遇到了一个关于Codechef的问题Chef and Three dogs。问题看起来很简单,但我没有得到逻辑。问题如下:
厨师有三只狗坐在等边三角形的顶点。三角形每边的长度等于s米。厨师发出命令“开始!”每只狗开始以每秒v米的速度运行。在每个时刻,每只狗都正好朝着他的方向跑(逆时针方向)。因此,它们的轨迹形成一些螺旋,会聚到一点,如下图所示。我已经完成了一些正确的提交,但我无法弄清楚为什么答案是(2/3)*(s / v)?
这是示例接受的代码:
#include<stdio.h>
int main()
{
int T,s,v;
double t;
scanf("%d\n",&T);
while(T--)
{
scanf("%d%d",&s,&v);
t = (2.0*s)/(3.0*v);
printf("%f\n",t);
}
return 0;
}
答案 0 :(得分:1)
通过注意问题中定义的对称性,可以很容易地看到这个问题。
第一步是要明白,由于三只狗的位置和运动固有的对称性,它们在任何给定时间的位置总是形成等边三角形,如图所示。
现在假设你正坐在其中一只狗身上(这很奇怪,但是还是假设它。:P)。对于你来说,等边三角形将继续减小尺寸直到它最终坍塌,这是狗相遇的地方。所以,这将是你在任何时候的观点。
对于坐在其中一只狗身上的观察者来说,在任何给定时间点,其相邻狗的速度成分都是 如第三张图所示。
因此,任何给定的狗都会感觉到
当它以速度v向相邻的狗移动时,相邻的狗以速度v / 2向它移动。因此,狗似乎以v + v/2 = 3v/2
的恒定速率彼此接近。由于初始距离为s
,因此需要的时间由s/(3v/2)
= 2s/3v
给出。