【FOJ】Problem 1190 Ride to School

Problem 1190 Ride to School.

题意

  • 有个空虚寂寞的学生C,他骑车的时候如果能有人一起,就按同行者的速度骑,没有人就等到有人为止。在万柳到燕园(4.5km)的路上,如果有人超过了他们,C就会跳票去跟速度更快的那个人。
    C在0时刻到达万柳
  • 若干组输入数据:
    骑手人数N (1 <= N <= 10000),N=0结束输入
    Vi(km/h),Ti(s),i号骑手的速度,i号骑手出发的时间
  • 输出:
    C的到达时间(向上取整)

思路

  • C总是跟着骑得快的那个 = C是和骑得最快的那个并列到达终点的 = C到达终点的时间为第一个骑手到达终点的时间
  • C肯定不会跟着在负数时刻出发的骑手一起到达终点:
    如果这个骑手速度最快,C跟着别人肯定不会追上他。如果这个骑手不是最快的,C只可能在跟着比他先到达终点的骑手时超过他。
  • 对每个骑手分别计算他们到达终点的时间,C的到达时间取最小
    由 h = 4.5/Vi,s = h×3600,t_arrive = s + Ti(到达时间=骑行用时+出发时间)
    得 t_arrive = 4.5/Vi×3600 + Ti

笔记

  • 向上/下取整
#include<math.h>
ceil(double);
floor(double);
注意这两的返回值不是int类型的

代码

#include<cstdio>
#include<math.h>
using namespace std;

int main(){
	int n, v, t;
	double min_t, t_arrive;
	scanf("%d", &n);
	while(n!=0){
		min_t = 100000;
		for(int i=0; i<n; i++){
			scanf("%d%d", &v, &t);
			if(t<0)
				continue;
			t_arrive = 4.5/v*3600.0 + t;
			if(t_arrive<min_t)
				min_t = t_arrive;
		}
		printf("%d\n", (int)ceil(min_t));
		scanf("%d", &n);
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 0 · 访问量 314

猜你喜欢

转载自blog.csdn.net/qq_44531167/article/details/105349226