本题是一道贪心算法解决的题目,这道题中需要我们给出最短到达目的地的时间,这个题中,人物每当遇到比自身快的人就会以相同的速度骑行。对于出发时间小于0的,如果速度比任务快,根本追不上,人物的速度与其无关,如果人物的速度比其快,那么人物的速度仍然保持,所以出发时间小于0的可以不用考虑。对于出发时间大于0的,也就是出发时间比人物慢,如果他比人物先到终点,就会相遇。人物的速度就会随之改变,两人并驾齐驱,到达终点,所以我们只需要找到所有出发时间大于0中,到达时间最短的即可。
#include <iostream>
#include <algorithm>
#include <cmath>
//贪心策略:
// 所有start>=0中,最先到终点的
using namespace std;
const int N = 1e4 + 10;
struct charlie {
int v;
int start;
double arrtime;
}cha[N];
int main() {
int n;
while (cin>>n&&n!=0) {
int _min = 0x3f3f3f3f;//定义一个最大数(10的9次幂),维护最小数
for (int i = 0; i < n;i++) {
cin >> cha[i].v >> cha[i].start;
if (cha[i].start < 0) continue;
else {
cha[i].arrtime = ceil(4500 / ((5.0 / 18.0) * cha[i].v) + cha[i].start);
if (cha[i].arrtime < _min)_min = cha[i].arrtime;
}
}
cout << _min << endl;
}
return 0;
}