问题描述
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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
样例输入
10 5 5 1 20
样例输出
R
3
样例输入
10 5 5 3 20
样例输出
T
4
思路:这个题关键就在于兔子一旦发现自己比乌龟多跑了t米,就会停下来休息s秒。那不就是相当于,兔子不休息,但是在原来就准备休息的那一瞬间,往回退s×v1米,然后不休息,往前把退回的这段距离补上。
<code>1
2
using
namespace
std;
3
4
class
race
5
{
6 public:
7
int
get_v1()
8
{
9
cin
>>
v1;
10
return
v1;
11
}
12
int
get_v2()
13
{
14
cin
>>
v2;
15
return
v2;
16
}
17
int
get_t()
18
{
19
cin
>>
t;
20
return
t;
21
}
22
int
get_s()
23
{
24
cin
>>
s;
25
return
s;
26
}
27
int
get_l()
28
{
29
cin
>>
l;
30
return
l;
31
}
32
void
race_progress()
33
{
34
int
i
=
0
;
35
int
s1
=
0
;
36
int
s2
=
0
;
37
while
(s1
<
l
&&
s2
<
l)
38
{
39
s1
=
s1
+
v1;
40
s2
=
s2
+
v2;
41
i++;
42
if
(s1
>=
l
||
s2
>=
l)
43
{
44
break;
45
}
46
if
(s1
-
s2
>=
t)
47
{
48
s1
=
s1
-
s
*
v1;
49
}
50
}
51
if
(s1
>
s2)
52
{
53
cout
<<
"R"
<<
endl;
54
cout
<<
i;
55
}
56
else
if
(s2
>
s1)
57
{
58
cout
<<
"T"
<<
endl;
59
cout
<<
i;
60
}
61
else
62
{
63
cout
<<
"D"
<<
endl;
64
cout
<<
i;
65
}
66
}
67
68 private:
69
int
v1,
v2,
t,
s,
l;
70
};
71
72
int
main(void)
73
{
74
race
x;
75
x.get_v1();
76
x.get_v2();
77
x.get_t();
78
x.get_s();
79
x.get_l();
80
x.race_progress();
81
return
0
;
82
}
/<code>
点个赞呗~