HDU1593

来源:互联网 发布:windows截图工具找不到 编辑:程序博客网 时间:2024/06/01 08:48

题意:有一个形状为规则圆的湖,半径为R。故事背景是A要追杀B,如今B在湖的中心,A在湖边,A不能下水,B必须上岸,不然B迟早会饿死在湖中。B在湖上的移动速度为v1,B与A在岸上的移动速度都为v2,以为着当B一上岸A还没能捉到B那么永远不可能捉到B了。问A能捉到B吗?

题解:一开始我们大部分人都回想到B在湖中心,B往A的反方向跑就OK,这样B的路程是R,A是PI * R。程序敲完,代码交上去果然WA,证明这不是最优情况。我们分析让A跑PI * R的路程着一定是最优的,问题是B跑R不是最优。那么怎样能让A仍然跑PI * R路程的同时,B的路程从R缩减到某个值?答案在角速度w上,w = v / r ,刚开始,对于B,r = 0,wB无限大,r增加,wB减少,即B的最优路程(R - r)减少,再 wB > wA之前,始终能保持B与A拉开距离的优势,直到 wB = wA,此时才是得到B反方向直跑前最优的路程。

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#define PI acos(-1)using namespace std;int main(){double R,v1,v2;while(~scanf("%lf%lf%lf",&R,&v1,&v2)){double r = v1 * R / v2;double t1 = (R-r) / v1;double t2 = (double)PI * R / v2;if(t1 < t2) printf("Yes\n");else printf("No\n");}return 0;}