链接
[]
题意
有n+1辆车,属性有长度l,距离终点的距离s,速度v
问你最末尾的车到达终点的时间分析
这是一个思维题吧
首先我们考虑要是最后的车到达终点之前没有和其他车贴在一起,答案就是s[0]/v[0]如果在到达终点之前与前面的车贴在一起,有这么些情况
与它前面一辆贴在一起,或者与它前面两辆贴在一起,或者更多辆 1,2,3,。。。都有可能。 好当与前面几辆贴在一起走到终点的速度就是这这几辆车最前面的那辆的速度 假设与前i辆贴在一起 答案是 (l1 + l2 + l3...+li)/s[i]; 所有就枚举以每辆车速度到达终点的时间,取最大即可代码
#includeusing namespace std;typedef long long ll;const int N = 1e5 + 10;int s[N],v[N],l[N];int main(){ int n; while(~scanf("%d",&n)) { for(int i = 0;i <= n;i++) scanf("%d",&l[i]); for(int i= 0;i <= n;i++) scanf("%d",&s[i]); for(int i = 0;i <= n;i++) scanf("%d",&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;}