题目链接
大概题意
有n辆车,每个车有一个到终点的距离,车身的长度和速度,车不能超车,最小车距为0,所有车通过的最小时间。
解题思路
我们考虑第一辆车如果全程都没有依附于任何车那么它的通过时间就是t1=s[1]/v[1];
如果它碰到了第二辆车,那么时间就为t2=(s[2]+l[2])/v[2]
显然,如果t1<t2的话就会撞上,如果t1<t2的话就不会撞上,其他的情况也是一样的,我们去枚举撞车的断点,最大的时间就是最后的答案。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
double s[maxn],v[maxn],l[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<=n;i++)
scanf("%d",&l[i]);
for(int i=0;i<=n;i++)
scanf("%d",&s[i]);
for(int i=0;i<=n;i++)
scanf("%d",&v[i]);
double ans=s[0]/v[0];
double res=0;
for(int i=1;i<=n;i++)
{
res+=l[i];
ans=max(ans,(res+s[i])/v[i]);
}
printf("%.8f\n",ans);
}
return 0;
}