【题目描述】 起点与终点相隔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 【心得】Charley永远跟着位置靠前的人一块骑行,而且跟其同时到达终点,也就是说,最先到达终点的人所用的时间就是Charley用的时间。(Charley就是一个喜快厌慢的同学),至于那些提前出发的,跑的快的追不上,能追上的跑得慢(无需跟随变速),可以忽略不计。 【AC代码】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const int maxn=10010; const int s=4500; struct people { int v,time; }p[maxn]; int main() { int n,mi; while(cin>>n) { if(n==0) break; mi=0x3fffffff; for(int i=0;i<n;i++) cin>>p[i].v>>p[i].time; for(int i=0;i<n;i++) { if(p[i].time<0) continue; if(mi>p[i].time+ceil(4500*3.6/p[i].v)) mi=p[i].time+ceil(4500*3.6/p[i].v); } cout<<mi<<endl; } return 0; }