Description
起点与终点相隔4500米。现Charley 需要从起点骑车到终点。但是,他有个习惯,沿途需要有人陪伴,即以相同的速度, 与另外一个人一起骑。而当他遇到以更快的速度骑车的人时,他会以相应的速度跟上这个更快的人。先给定所有与Charley 同路的人各自的速度与出发时间,问Charley 以这种方式跟人,骑完4500米需要多少时间。得出的结果若是小数,则向上取整。
Input
输入若干组数据,每组数据第一行n(1≤n≤10000),n为0,表示输入结束,接着输入n行数据,每行2个数据,表示速度v(km/h)和出发时间t,如果t<0,表示陪伴人提早出发了。
Output
输出对应若干行数据,每行输出1个数,表示最快到达的时间。
Sample Input
4
20 0
25 -155
27 190
30 240
2
21 0
22 34
0
Sample Output
780
771
开始做这道题智障了,速度单位没说,我拿m/s来算追及问题,连样例的结果都算不出来TT!,后来看了答案,看了播客,好吧,不是m/s也不用算追及问题,贪心就完事,依次计算每个陪同的总时间,最后哪个陪同先到终点,最短总时间就是那位陪同的是总时间,刺激.jpg. 提前出门的陪同,要么追不上,要么就超过他。
cmath库里的ceil()向上取整挺好用的,floor()向下取整也了解下,当然也可以直接用x+0.9来向上取整(考虑有0.000001的情况就多打几个9)。
Source
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin >> n;
while(n)
{
int t;
double v, time, ans = 99999;
for(int i = 0; i < n; i++)
{
cin >> v >> t;
if(t < 0)
continue;
time = (4500 / v * 3.6 );
time = ceil(time) + t;
if(time < ans)
ans = time;
}
cout << (int)ans << endl;
cin >> n;
}
return 0;
}