题目链接:https://cn.vjudge.net/problem/HDU-6581
题意:给你n+1辆车,在一条狭窄的路上行驶,每辆车都有三个属性,l[i],s[i],v[i],
l[i]:代表车长
s[i]:代表车头到停止线的距离
v[i]:代表速度
车在前进的时候如果前面有车,并且车的速度比它小,那么就会追上并且黏在一起成为一辆车。
给你的车的标号依次为,
车在窄路上的分布为
,
| 此处为停止线(
离停止线最远)
问 越过停止线的时间
思路:对于除去的每一辆车
,它的车尾越过停止线时所跑的距离是
S[] = s[
] + (l[
]+
)
所以花费的时间就是S[] / v[
];
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define ll long long
const int maxn = 1e6+5;
const ll mod = 1e9+7;
using namespace std;
int l[maxn],s[maxn],d[maxn],v[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF) {
for(int i=0;i<=n;i++) {
scanf("%d",&l[i]);
d[i]=0;
if(i==0)continue;
d[i] = d[i-1] + l[i];
}
for(int i=0;i<=n;i++) {
scanf("%d",&s[i]);
d[i]+=s[i];
}
for(int i=0;i<=n;i++) {
scanf("%d",&v[i]);
}
double t=0;
for(int i=1;i<=n;i++) {
t = max(t,(double)d[i]/v[i]);
}
t = max(t,(double)d[0]/v[0]);
printf("%.10f\n",t);
}
return 0;
}