1 solutions

  • 0
    @ 2024-12-5 18:18:59

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    
    long long n,d,v[100000],a[100000],ans;
    
    int main(){
        	freopen("road.in","r",stdin);
    	freopen("road.out","w",stdout);
        cin>>n>>d;
        for(int i=1;i<n;i++)
        {
            cin >> v[i]; //区间
        }
        for(int i=1;i<=n;i++) cin>>a[i]; //油价
        long long dis = 0;
        long long lowp = a[1];
        for(int i = 1;i<n;i++){ //对区间进行循环
            if(dis < v[i]){ //要加油
                int x;//每个区间要加的油油多少升
                x = ceil(1.0*(v[i] - dis) / d); //最少加的油
                dis += d*x; //这么多油行驶的公里数
                ans += x*lowp;
            }
            dis -= v[i]; // 算出下一个区间的起点
            lowp = min(lowp,a[i+1]);
        }
        cout<<ans;
    }
    
    • 1

    Information

    ID
    9135
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By