厨师和三狗解决方案

时间:2016-10-17 15:02:36

标签: c algorithm

最近我遇到了一个关于Codechef的问题Chef and Three dogs。问题看起来很简单,但我没有得到逻辑。问题如下:

厨师有三只狗坐在等边三角形的顶点。三角形每边的长度等于s米。厨师发出命令“开始!”每只狗开始以每秒v米的速度运行。在每个时刻,每只狗都正好朝着他的方向跑(逆时针方向)。因此,它们的轨迹形成一些螺旋,会聚到一点,如下图所示。 sample example image as given is here:

我已经完成了一些正确的提交,但我无法弄清楚为什么答案是(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;
}

1 个答案:

答案 0 :(得分:1)

通过注意问题中定义的对称性,可以很容易地看到这个问题。

第一步是要明白,由于三只狗的位置和运动固有的对称性,它们在任何给定时间的位置总是形成等边三角形,如图所示。

enter image description here

现在假设你正坐在其中一只狗身上(这很奇怪,但是还是假设它。:P)。对于你来说,等边三角形将继续减小尺寸直到它最终坍塌,这是狗相遇的地方。所以,这将是你在任何时候的观点。

enter image description here

对于坐在其中一只狗身上的观察者来说,在任何给定时间点,其相邻狗的速度成分都是 如第三张图所示。

enter image description here

因此,任何给定的狗都会感觉到 当它以速度v向相邻的狗移动时,相邻的狗以速度v / 2向它移动。因此,狗似乎以v + v/2 = 3v/2的恒定速率彼此接近。由于初始距离为s,因此需要的时间由s/(3v/2) = 2s/3v给出。