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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM