首先发现,最终第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 }