【题目描述】
起点与终点相隔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
算法:贪心
这题非常的巧妙,一开始看到时候就头疼,这模拟也太难了吧,后来就去睡觉了,然后在干这题时,已经晚上了,去看了下别人的博客,发现是真的的巧妙,因为这个人一定是走最快的人跑的,也就说明,他一定会和最快到达终点使的人一起到达终点,当然也要注意提前跑的人肯定是不管的,想想如果要追上他,那么一定要速度比他快,怎么可能跟他一起走。
哎,贪心就是这么的难搞。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
while(cin>>n, n)
{
int minn = 0x3f3f3f3f;
for(int i=0; i<n; i++)
{
int t,v;
cin>>v>>t;
if(t < 0 ) continue;
int T = ceil(4500 * 3.6 / v + t); //速度的转换
if(minn > T) minn = T;
}
cout<<minn<<endl;
}
return 0;
}