标签:des style color java os io strong 文件
100 10 20 100 10 50
Yes No
开始天真的以为只要0086往敌人的对角跑再判断就行了。。然后。。结果。。很显然就WA了。。
正确思想应该是这样的:
首先,我们知道角速度等于 速度除以半径,即: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<cstdio> #include<string> #include<cmath> #include<cstring> #include<cctype> #include<cstdlib> #include<vector> #include<set> #include<map> #include<stack> #include<queue> #include<list> #include<algorithm> #include<iostream> #include<sstream> using namespace std; const double pi = 3.1415926; int main() { double r, v1, v2, R; while( scanf("%lf%lf%lf", &r, &v1, &v2) == 3 ) { R = ( v1*r ) / v2; double time_0086 = ( r - R ) / v1; double time_elnil = ( pi * r ) / v2; if( time_0086 < time_elnil )printf("Yes\n"); else printf("No\n"); } return 0; }
HDU 1593: find a way to escape,布布扣,bubuko.com
HDU 1593: find a way to escape
标签:des style color java os io strong 文件
原文地址:http://blog.csdn.net/u013487051/article/details/38535039