题目链接:https://vjudge.net/problem/HDU-6581
题意:
有n+1辆车排成一列往终点行驶(行驶过程中不能超车),每辆车有各自的车长、离停止线的距离和车速,你的车在最后一个位置,问你的车头到达停止线所需的最少时间。
思路:
每一辆车都需要为后面的车辆腾出一定的距离(距离停止线的长度加上后面所有车(除最后一辆车)的车身长度),以至于每辆车都能通过停止线。计算出每一辆车行驶出这段距离的最大时间,即为你的车头到达停止线所需的最少时间。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 1008611
#define inf 0x3f3f3f3f
using namespace std;
int l[100010],s[100010],v[100010];
double len[100010];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<n+1; i++)
scanf("%d",&l[i]);
for(int i=0; i<n+1; i++)
scanf("%d",&s[i]);
for(int i=0; i<n+1; i++)
scanf("%d",&v[i]);
double maxx=1.0*s[0]/v[0];
len[0]=0.0;
for(int i=1; i<n+1; i++)
len[i]=len[i-1]+l[i];
for(int i=1; i<n+1; i++)
if((len[i]+s[i])*1.0/v[i]>maxx)
maxx=(len[i]+s[i])*1.0/v[i];
printf("%.7f\n",maxx);
}
return 0;
}