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