其他分享
首页 > 其他分享> > 【HDU - 6581】Vacation(思维)

【HDU - 6581】Vacation(思维)

作者:互联网

Vacation

题意

有n+1辆车,属性有长度l,距离终点的距离s,速度v
问你最末尾的车到达终点的时间

Sample Input

1
2 2
7 1
2 1
2
1 2 2
10 7 1
6 2 1

Sample Output

3.5000000000
5.0000000000

注意哈  Sample Input改一下格式

1
2 2 7
1 2 1 2 1 2 2 10 7 1 6 2 1

这样看的就舒服写了  我一开始做题,硬是看了数据好长时间,感觉这是故意这样写的,好坑啊

 

题目链接

https://vjudge.net/problem/HDU-6581

 

首先我们考虑要是最后的车到达终点之前没有和其他车贴在一起,答案就是s[0]/v[0]

如果在到达终点之前与前面的车贴在一起,有这么些情况

和它前面第一辆车(这个第一是指末尾车前面的第一辆,即倒数第二辆,下面同理)贴在一起,那么答案就是 (l1+s1)/v1

和它前面第一、二辆车贴在一起,那么答案就是 (l1+l2+s2)/v2

和它前面第i辆车贴在一起,那么答案就是 (l1+l2+......+li+si)/vi

所有就枚举以每辆车速度到达终点的时间,取最大即可

 

AC代码

 

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 100005
using namespace std;
int n;
ll l[Maxn],s[Maxn],v[Maxn];
int main()
{
    while(cin>>n)
    {
        for(int i=0; i<=n; i++)
            cin>>l[i];
        for(int i=0; i<=n; i++)
            cin>>s[i];
        for(int i=0; i<=n; i++)
            cin>>v[i];
        double ans=s[0]*1.0/v[0];
        ll sum=0;
        for(int i=1; i<=n; i++)
        {
            sum+=l[i];
            ans=max((sum+s[i])*1.0/v[i],ans);
        }
        printf("%.10f\n",ans);
    }
    return 0;
}

 

标签:HDU,终点,int,ll,6581,Vacation,Maxn,include,define
来源: https://www.cnblogs.com/sky-stars/p/11233322.html