HDU 6581バケーション

トピックへのリンク:http://acm.hdu.edu.cn/showproblem.php?pid=6581


アイデア:ラインを停止することによって1人の決勝、それだけで前の車の時間の後、影響すべての車を、残りの車のDuzhe、背後に配置する必要があります。車の速度に常に同じであるので、我々は答えを計算することができます。

     開始から合計で行くために車を終了(停止線から初期距離にS Iを  0と車両+車両との間に介在する長さ  [シグマL I)/ V I

   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 }

 

おすすめ

転載: www.cnblogs.com/Carered/p/11228330.html