題目描述
話說這個世界上有各種各樣的兔子和烏龜,但是 研究發現,所有的兔子和烏龜都有一個共同的特點——喜歡賽跑。於是世界上各個角落都不斷在發生着烏龜和兔子的比賽,小華對此很感興趣,於是決定研究不同兔 子和烏龜的賽跑。他發現,兔子雖然跑比烏龜快,但它們有眾所周知的毛病——驕傲且懶惰,於是在與烏龜的比賽中,一旦任一秒結束后兔子發現自己領先t米或以 上,它們就會停下來休息s秒。對於不同的兔子,t,s的數值是不同的,但是所有的烏龜卻是一致——它們不到終點決不停止。
然而有些比賽相當漫長,全程觀看會耗費大量時間,而小華發現只要在每場比賽開始后記錄下兔子和烏龜的數據——兔子的速度v1(表示每秒兔子能跑v1 米),烏龜的速度v2,以及兔子對應的t,s值,以及賽道的長度l——就能預測出比賽的結果。但是小華很懶,不想通過手工計算推測出比賽的結果,於是他找 到了你——清華大學計算機系的高才生——請求幫助,請你寫一個程序,對於輸入的一場比賽的數據v1,v2,t,s,l,預測該場比賽的結果。
輸入
輸入只有一行,包含用空格隔開的五個正整數v1,v2,t,s,l,其中(v1,v2< =100;t< =300;s< =10;l< =10000且為v1,v2的公倍數)
輸出
輸出包含兩行,第一行輸出比賽結果——一個大寫字母“T”或“R”或“D”,分別表示烏龜獲勝,兔子獲勝,或者兩者同時到達終點。
第二行輸出一個正整數,表示獲勝者(或者雙方同時)到達終點所耗費的時間(秒數)。
樣例輸入
10 5 5 2 20
樣例輸出
D
4
分析:
剛開始直接考慮兔子和烏龜之間的距離間隔達到t的時候,在這整個的時間間隔內來進行比較兔子和烏龜已經走過的路程和時間的比較,但是這樣的話會有一個缺陷,那就是在這個時間間隔內兔子可能會超過烏龜,這樣的話就不太好判斷。
轉換一下思路,就是將烏龜和兔子進行同步的時間的比較(即一秒一秒的計算兔子和烏龜走過的距離),在這種情況下兩者的時間是一樣的直接比較兩者是否到達終點。
代碼
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int v1,v2,t,s,L;
int s1=0,t1=0,s2=0,t2=0;
scanf("%d%d%d%d%d",&v1,&v2,&t,&s,&L);
t1+=1;
t2+=1;
s1=s1+v1;
s2=s2+v2;
while(true) //時間是同步的
{
if(s1==L&&s2==L) //兩個都到達終點了
{
cout<<"D"<<endl;
cout<<t1<<endl;
break;
}
if(s1==L) //兔子到達終點
{
cout<<"R"<<endl;
cout<<t1<<endl;
break;
}
if(s2==L) //烏龜到達終點
{
cout<<"T"<<endl;
cout<<t2<<endl;
break;
}
if(s1-s2>=t) //如果此時兩者之間的距離大於t了
{
t1+=s;
// t2+=s; //不能這樣寫,因為在這過程中可能跑過終點了
// s2=s2+v2*s;
for(int i=1; i<=s; i++)
{
t2+=1;
s2+=v2;
if(s2==L)
{
cout<<"T"<<endl;
cout<<t2<<endl;
exit(0);
}
}
}
else///否則的話要一秒一秒的走
{
t1+=1;
t2+=1;
s1=s1+v1;
s2=s2+v2;
}
}
return 0;
}
