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
",ans);
    }
}
原文地址:https://www.cnblogs.com/wmj6/p/11326923.html