[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 }

 

 

posted @ 2014-02-21 13:21  beautifulzzzz  阅读(655)  评论(0编辑  收藏  举报