1227:Ride to Office

【算法分析】

样例的输入输出对不上,查了英文原题,发现,题目表述不清:
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. 
速度单位km/h,时间单位s

一.题目大意

      每次C追上或者被追上,都会选择是否变速,又由于要求最快到达那么一定是被赶上。被赶上的条件是什么?一个比C当前速度快的人,比C晚出发,就会被赶上。

二.确定算法

      于是每次在读入数据,一旦满足上述条件,就做一次比较,看和这个人一起到终点和之前一起到终点那个时间短就跟哪个。由于没有询问人的编号,所以不需要记录过程,直接记录最小值。怎么计算到终点的时间,使用宏观上的思维,不去考虑具体的过程,聚焦结果。

从C的角度看:    阶段1.被赶上 阶段2.一起走

从那个人的角度看:阶段1.不变速 阶段2.不变速 最终:到达终点

而C从人出发之前t秒出发,然后和人一起到达终点,所需要的时间就是那个人从0秒开始到达终点所需要的时间,既t+ceil(4500/(1000.0*v/3600))

三.细节部分

      注意题中是4500米,而速度是公里/小时,所以计算的时候要换算一下。中间过程中速度要使用浮点数便于转换单位,而计算最终的时间使用int就可以,直接强制转化最后的答案向上取整。


【代码】

#include <stdio.h>

#include <math.h>

#define MIN 0x3f3f3f3f

int main()

{

 int i,n,t,time,minn;

 double v;

 while(scanf("%d",&n) && n)

 {

  minn=MIN;

  for(i=1;i<=n;i++)

  {

   scanf("%lf%d",&v,&t);

   if(t>=0)

   {

    time=(int)(t+ceil(4500/(1000.0*v/3600)));  

    if(time<minn)

     minn=time;

   }

  }

  printf("%d\n",minn);

 }

 return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值