HDU 1593題解

find a way to escape

Problem Description

一日,話說0068與泛舟湖上。忽見岸邊出現他的一大敵人elnil。0068當然不想落入elnil的魔爪,於是他就得想辦法逃脫。這個湖是一個很規則的圓形,半徑爲R。此時0068正好在圓心位置。小船在湖中的速度爲 V1,0068和elnil在岸上的速度都爲V2。也就是說,如果0068在剛上岸的時候沒被抓到,則他可逃脫。在任意時刻,0068和elnil都可以朝任何方向移動,但是0068不能一直呆上船上(會餓死的),elnil不能下水(他不會游泳)。假設0068和elnil都非常聰明,總能做對自己最有利的事情,而且兩個人的體力都是無限的。
請問,0068最終能不能逃脫elnil的魔爪?

Input

本題目包含多組測試。請處理到文件結束。
每組測試包含三個整數,R,V1,V2。

Output

 對於每組數據,如果0068能夠安全逃脫,輸出Yes,
 否則輸出No。
 數據不會出現正好抓到的情況,
 所以你可不用太考慮臨界點。

Sample Input

100 10 20
100 10 50

Sample Output

Yes
No

題解:

分析:

在這裏插入圖片描述
如圖:0068在圓心處,惡魔在大圓點處,0068圈內運行速度v1,惡魔和0068圈外速度均爲v2,圓半徑爲R。可知,只要出圈時爲捉住,就不會再抓住。問題轉變爲:0068上岸時,惡魔能否正好抓到0068.

~常見解法(此解錯誤):

在這裏插入圖片描述
0068沿着黑色線段衝向岸邊(相對惡魔最遠點),惡魔沿着藍色弧線衝向對面。
我們來看看這種做法:既然是這個思路,那麼圈內存在0068角速度大於惡魔角速度的區域,那走直線就會浪費掉這點優勢。

分析後,我們求出最優走法:

在這裏插入圖片描述
在小圈(小圈,0068和惡魔角速度相同時對應r的圓),0068的角速度肯定大於惡魔,所以,無論多長時間,總會造成現在的局面(0068在小圓上最遠離惡魔的地方)。現在0068以v1的速度沿着藍色線段衝向岸邊,惡魔以v2的速度沿着藍色弧線衝向對面,比較現在兩者用時便可解決問題。
附上代碼:

#include<stdio.h> 
int main()
{
	double v1,v2,R;
	double r,t1,t2;
	while(scanf("%lf%lf%lf",&R,&v1,&v2)!=EOF){
		r=v1*R/v2;//由角速度相等的等式,求出小圓半徑
		t1=(R-r)/v1;     
		t2=3.1415926*R/v2;
		if(t1<t2){//分別求得兩者時間進行比較
			printf("Yes\n");
		}
		else printf("No\n");
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章