2019 Multi-University Training Contest 1 D.Vacation(思维)
题意:有n俩车行驶在一条道路上,每辆车有车长li,距离终点的距离si,速度vi,不能超出,并且驶过终点后会依旧保持原状态行驶,问最后一辆车过终点的时间。
思路:因为行驶过终点后还是要保持之前的行驶方式 所以我们可以考虑枚举经过终点是哪一辆车 那么时间就只和这辆车的速度有关 那么我们就在其间找最大值
对于当前车经过终点但是却没有连成一块的情况 大家可以模拟一下 这种情况一定不是最优的
#include <bits/stdc++.h> using namespace std; const double pi = acos(-1.0); const int N = 1e5+7; const int inf = 0x3f3f3f3f; const double eps = 1e-6; typedef long long ll; const ll mod = 1e7+9; int l[N],s[N],v[N]; int main(){ ios::sync_with_stdio(false); // cin.tie(0); cout.tie(0); int n; while(cin>>n){ ll sum=0; 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=0; for(int i=0;i<=n;i++){ sum+=l[i]; ans=max(ans,(sum+s[i]-l[0])*1.0/v[i]); } printf("%.10f\n",ans); } }