全部评论 1

  • #include<bits/stdc++.h>
    using namespace std;
    #define ll long long

    int dyr(){
    ll n,d,money=0,current_fuel=0; // 将变量名改为更清晰的名称
    cin>>n>>d;
    vector<ll> v(n-1); // n-1个路段
    vector<ll> a(n); // n个站点的油价
    for(auto &it:v) cin>>it;
    for(auto &it:a) cin>>it;

    ll min_price = a[0];  // 当前遇到的最低油价
    
    // 只需要遍历n-1个路段,因为有n-1段路连接n个站点
    for(int i=0;i<n-1;i++){
        ll distance = v[i];  // 当前路段距离
        
        // 如果当前油量不够行驶这段距离,需要加油
        if(current_fuel * d < distance){
            // 计算需要补充的油量(升),向上取整
            ll needed = distance - current_fuel * d;
            ll fuel_to_add = (needed + d - 1) / d;  // 等价于ceil(needed*1.0/d)
            
            money += fuel_to_add * min_price;
            current_fuel += fuel_to_add;
        }
        
        // 行驶当前路段,消耗油量
        current_fuel -= distance / d;
        if(distance % d != 0) current_fuel -= 1;  // 处理余数情况
        
        // 更新最低油价(下一个站点的价格)
        if(i+1 < n)  // 防止越界
            min_price = min(min_price, a[i+1]);
    }
    
    cout<<money;
    return 0;
    

    }

    int main(){
    freopen("road.in","r",stdin);
    freopen("road.out","w",stdout);
    dyr();
    fclose(stdin);
    fclose(stdout);
    return 0;
    }

    1周前 来自 内蒙古

    0

热门讨论