题目描述
起点与终点相隔4500米。现Charley需要从起点骑车到终点。但是,他有个习惯,沿途需要有人陪伴,即以相同的速度,与另外一个人一起骑。而当他遇到以更快的速度骑车的人时,他会以相应的速度跟上这个更快的人。先给定所有与Charley同路的人各自的速度与出发时间,问Charley以这种方式跟人,骑完4500米需要多少时间。得出的结果若是小数,则向上取整
输入
输入若干组数据,每组数据第一行n(1<=n<=10000),n为0,表示输入结束,接着输入n行数据,每行2个数据,表示速度v和出发时间t,如果t<0,表示陪伴人提早出发了。
输出
输出对应若干行数据,每行输出1个数,表示最快到达的时间。
输入样例
4
20 0
25 -155
27 190
30 240
2
21 0
22 34
0
输出样例
780
771
题目分析
以陪跑为0的时间为参考时间,所用的时间一定等于陪跑的时间,陪跑时间越短所用时间越短,以陪跑为中心。
分析:t<0的陪跑 如果可以与t<0的陪跑相遇,说明t<0的陪跑速度慢,如果t<0的陪跑的速度快,则永远都不可能追上,即永远不可能相遇,所以t<0的陪跑为干扰项,如果t>0的陪跑在以t=0的陪跑的参考时间下速度快,那么说明整体所用的时间比t=0的时间短,所以取t>=0中最短的时间即为所求。
(注意:题目中所给的路程为“米”,速度为“千米每小时”
1
m
/
s
=
3.6
k
m
/
h
1 m/s=3.6 km/h
1m/s=3.6km/h)
代码
#include<iostream>
using namespace std;
int main(void){
int n;
while(cin>>n&&n){
int x=4500;
float v,t,Min=0;
for(int i=0;i<n;i++){
cin>>v>>t;
if(t<0)
continue;
t+=(x*3.6)/v; //路程的单位为米 速度为km/h *3.6单位转换
if(t<Min||Min==0)
Min=t;
}
if(Min>(int)Min)
cout<<(int)Min+1<<endl;
else
cout<<Min<<endl;
}
return 0;
}