【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