[hdu6581]Vacation

首先发现,最终第0辆车一定被堵在某一辆车前,那么等价于它的初始位置就在(那辆车的位置+中间车的车长)/那辆车的速度,其中最大的那个就是答案
因此得出结论:$ans=max((\sum_{j=1}^{i}l[j]+s[i])/v[i])$,其中$i\in [0,n]$

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 100005
 4 int n,l[N],s[N],v[N];
 5 long long sum;
 6 double ans;
 7 int main(){
 8     while (scanf("%d",&n)!=EOF){
 9         for(int i=0;i<=n;i++)scanf("%d",&l[i]);
10         for(int i=0;i<=n;i++)scanf("%d",&s[i]);
11         for(int i=0;i<=n;i++)scanf("%d",&v[i]);
12         ans=sum=0;
13         for(int i=0;i<=n;i++){
14             if (i)sum+=l[i];
15             ans=max(ans,1.0*(sum+s[i])/v[i]);
16         }
17         printf("%.7f\n",ans);
18     }
19 } 
View Code
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11260400.html