HDU 6581 Vacation

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6581


思路:1.最终通过停止线的时候,一定是一个车后面堵着剩余所有的车,那么影响时间的就只有最前面这辆车。由于这辆车始终速度不变,那么我们可以这样计算答案:

     从开始到结束这辆车总共要走 (初始离停止线的距离Si  + 与 0 车之间夹着的车的长度 Li )/  这俩车的速度Vi.

   2.所以对于每一辆车, 假设是它是和 0 车堵在一起的最靠前的一辆车,那么可以计算出一个值,所有的车的计算值的最大值就是答案。这个贪心挺难想的,我的理解是时间最长的车会堵住后面的车,在时间最长的车前面的车比它快所以不会卡住它。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5 +5;
 4 struct edge{
 5     double v,s,len;
 6 }es[maxn];
 7 int main()
 8 {
 9     int n;
10     while(~scanf("%d",&n))
11     {
12         int m = 1;
13         for(int i = 1;i <= n + 1;i++) scanf("%lf",&es[i].len);
14         for(int i = 1;i <= n + 1;i++) scanf("%lf",&es[i].s);
15         for(int i = 1;i <= n + 1;i++) scanf("%lf",&es[i].v);
16         double ans = 0;
17         double lazy = 0;
18         for(int i = 1;i <= n + 1;i++)
19         {
20             if(i != 1) lazy += es[i].len;
21             double t = (es[i].s + lazy) / es[i].v;
22             ans = max(t,ans);
23         }
24         printf("%.10f\n",ans);
25     }
26     return 0;
27 }

 

转载于:https://www.cnblogs.com/Carered/p/11228330.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值