标签:HDU 终点 int ll 6581 Vacation Maxn include define
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。