HDU-1445 Ride to School

HDU-1445 Ride to School

Many graduate students of Peking University are living in Wanliu Campus, which is 4.5 kilometers from the main campus - Yanyuan. Students in Wanliu have to either take a bus or ride a bike to go to school. Due to the bad traffic in Beijing, many students choose to ride a bike.

We may assume that all the students except “Charley” ride from Wanliu to Yanyuan at a fixed speed. Charley is a student with a different riding habit - he always tries to follow another rider to avoid riding alone. When Charley gets to the gate of Wanliu, he will look for someone who is setting off to Yanyuan. If he finds someone, he will follow that rider, or if not, he will wait for someone to follow. On the way from Wanliu to Yanyuan, at any time if a faster student surpassed Charley, he will leave the rider he is following and speed up to follow the faster one.

We assume the time that Charley gets to the gate of Wanliu is zero. Given the set off time and speed of the other students, your task is to give the time when Charley arrives at Yanyuan.

Input
There are several test cases. The first line of each case is N (1 <= N <= 10000) representing the number of riders (excluding Charley). N = 0 ends the input. The following N lines are information of N different riders, in such format:

Vi [TAB] Ti

Vi is a positive integer <= 40, indicating the speed of the i-th rider (kph, kilometers per hour). Ti is the set off time of the i-th rider, which is an integer and counted in seconds. In any case it is assured that there always exists a nonnegative Ti.

Output
Output one line for each case: the arrival time of Charley. Round up (ceiling) the value when dealing with a fraction.

Sample Input
4
20 0
25 -155
27 190
30 240
2
21 0
22 34
0
Sample Output
780
771

题目中文释义:

北京大学的许多研究生住在万柳校区,距离主校区 - 盐源4.5公里。万柳的学生必须乘坐公共汽车或骑自行车去学校。由于北京交通不畅,许多学生选择骑自行车。

我们可以假设除了“查理”以外的所有学生都以固定的速度从万柳到盐源。查理是一个有不同骑乘习惯的学生 - 他总是试图跟随另一个骑手,以避免单独骑马。当查理到达万柳大门时,他会找一个正在前往盐源的人。如果他找到某人,他将跟随那个骑手,如果没有,他会等待有人跟随。在从万柳到盐源的路上,如果一个更快的学生超过查理,他将随时离开他跟随的骑手并加快跟随更快的速度。

我们假设查理到万柳门的时间是零。考虑到其他学生的出发时间和速度,你的任务是给Charley到达Yanyuan的时间。

输入
有几个测试用例。每种情况的第一行是N(1 <= N <= 10000),表示骑手的数量(不包括查理)。N = 0结束输入。以下N行是N个不同骑手的信息,其格式为:

Vi [TAB] Ti

Vi是正整数<= 40,表示第i个骑手的速度(kph,每小时公里数)。Ti是第i个骑手的起飞时间,它是一个整数并以秒为单位计算。在任何情况下都确保始终存在非负Ti。

产量
每个案例输出一行:查理的到达时间。在处理分数时向上舍入(上限)值。

样本输入
4
20 0
25 -155
27 190
30 240
2
21 0
22 34
0
样本输出
780
771

贪心算法问题:
注意事项:1.只需要判断出发时间大于0的同学 2.找出出发时间大于0且用时最短的同学,该同学的时间即是答案

额外需要引入#include<math.h>头文件,因为在处理分数时候向上取整数需要用到ceil函数
ceil函数:
功 能: 返回大于或者等于指定表达式的最小整数
头文件:math.h

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
	int i,n,v,a,b;
	while(scanf("%d",&n)!=EOF){
		if(n == 0){
			break;
		}
		int min = 0x7fffffff;          //0x7fffffff是long int的最大值,此处为了保证下面的最小值可以覆盖
		for(i=0;i<n;i++){
			scanf("%d%d",&a,&b);
			if(b<0){
				continue;  //如果b<0说明出发的时间比查理早,就不用管了
			}
			v = (int)ceil(4500.0/a*3.6+b);//算出每一位同学到达的时间,并找出最小值
			if(min > v){
				min = v;
			}
		}
		printf("%d\n",min);//输出最小值
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值