[ACM_模拟] ZJUT OJ 1139 七龙珠 (追及类问题,s-t图像,模拟)

Description

 

  话说孙悟饭与小林正在与刚造访地球的赛亚人贝吉塔交战,因为连贝吉塔的手下纳巴的实力也远在他俩之上,由于差距悬殊,小林不得不设脱离战场,去寻找正在修炼中的悟空求救,而赛亚人一伙岂能让他们轻易逃脱,于是贝吉塔让纳巴去追小林而着手对付孙悟饭。
   假设小林的速度是vp 每秒,纳巴速度 vd每秒,他俩与贝吉塔当时处在同一地点(无视孙悟饭),当纳巴觉察到小林逃跑这一举动需要t秒反应时间,小林会在此间全速离开,虽然看起来小林毫无胜算,但是他有一招叫做太阳拳的绝招,一旦纳巴超越自己那一瞬间,他会使出太阳拳让纳巴失明,一旦使出该招,纳巴不得不立即回去找贝吉塔拿眼药水,即他必须返回原处,并且在那里闭目养神f秒之后,再重新追赶,作为一名力大无穷却智商奇低的选手,小林这太阳拳屡试不爽,设刚开始与贝吉塔所在的地方为起点,该点离悟空修炼处相距为c,求小林到达悟空处 最少需要使用几次太阳拳,如果小林刚好到达悟空处,而纳巴正好追到,则该次无需使用太阳拳,因为悟空会帮你干掉纳巴。
 

Input


多组数据,每行一个数,分别代表vp,vd,t,f ,c, (1≤vp,vd≤100, 1≤t,f≤10, 1≤c≤1000).

 

 

Output

每组数据一个整数,表示太阳拳最少使用次数。 

 

Sample Input

1

2

1

1

10

1

2

1

1

8

Sample Output

2

1

题目大意:建议画出s-t图像,建议把纳巴开始的时间设为0

解题思路:设变量d为每次纳巴从开始追到追上小林的时间,这样d1=vp*t/(vd-vp);以后每次新的d=(d*(vp+vd)+f*vp)/(vd-vp),这样不断维护一个cur当前时间,和小林找到悟空的时间all相比就可以啦!

 

 1 #include<iostream>

 2 #include<cmath>

 3 using namespace std;

 4 int main(){

 5     double vp,vd,t,f,c;

 6     while(cin>>vp>>vd>>t>>f>>c){

 7         int tot=0;//次数

 8         double all=c/vp-t;//总时间(把先走的减掉)

 9         double cur=0;//当前时间

10         double d=0;//纳吧每一次从开始追到追上的时间

11 

12         if(vd<=vp)tot=0;

13         else{

14             d=vp*t/(vd-vp);

15             cur+=d;

16             if(cur>=all)tot=0;

17             else{

18                 while(cur<all){

19                     tot++;

20                     cur+=(d+f);

21                     d=(d*(vp+vd)+f*vp)/(vd-vp);//用老的更新新的

22                     cur+=d;

23                 }

24             }

25         }cout<<tot<<'\n';

26     }return 0;

27 }

 

 

你可能感兴趣的:(ACM)