hdu Find a way to escape (几何)



                 纯粹的几何。


               首先,我们知道角速度等于 速度除以半径,即:w = v / r  


                 又因为,湖的半径不会变,且岸边人总是采取最好的策略,那么他的角速度就一定是 


                    W2 = V2 / R 

                   

                     而湖中人想要能逃脱的话,他肯定会采取一种策略,就是 你以湖中心转多少角度,我就也转多少角度,


                   也就是说,你岸边人,只要我的角速度和你的一样,你就肯定和我,还有湖中心,三个点在一条直线上,但是我只要保持这个状态,然后向前划就可以了


                  因为岸边人相对于湖中心的半径是R,而湖中人最开始的半径是0,所以最开始出发时,只要湖中人,把握的好,他的角速度一定可以一直等于岸边人的,


                 也就是说,他能让岸边人,像站在原地一样,而他自己却已经离开了湖中心。


                   但是我们也知道,能保持这样的状态时有个条件的,那就是湖中人的角速度要大于等于岸边人的。


                    这个条件的边界就是 他们两个的角速度相等。即:


                    W1 = W2 ==>  V1 / r = V2 / R  ==>  r =V1 * R / V2  


                    从这里我们可以知道,当处于边界状态时,湖中人已经离开湖中心 r 的距离了。  而岸边人还是和他还有湖中心,三点成一直线,


                  那么,  假如R< r  那么此时他就一定能逃脱了。因为他上岸了,但是岸边人还过来不了,速度一样快的情况下,他肯定能逃。


                而 假如  R> r   那么就要看 船速和人的速度了。


                  即:  假如在剩下的  R-r   的距离里,船划过去的时间是  (R-r )/ V1  要小于π * V2 /R 即岸边人冲到他的对岸的距离所用的时间。


                    那么,湖中人肯定就能逃掉。


               假如大于的话,  那肯定就逃不了了。  

                   

                     代码的话,太简单了。


#include <stdio.h>
#define PI 3.1415926535
int main()
{
    double r,v1,v2;
    while(~scanf("%lf%lf%lf",&r,&v1,&v2))
    {
        if(PI*r/v2<(r-v1*r/v2)/v1)
            puts("No");
        else
            puts("Yes");
    }
    return 0;
}


                  这题应该只告诉v1, v2两个人的速度,就更有意思了(一句话AC代码,表问我为什么能AC)

main(){float v,k;while(~scanf("%f%f%f",&v,&v,&k)){(4.1<k/v)?puts("No"):puts("Yes");}}


你可能感兴趣的:(hdu Find a way to escape (几何))