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