Ride to office 贪心

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;
}

 

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页