AcWing 5308. 公路
原题链接
中等
作者:
171800
,
2024-10-18 12:55:04
,
所有人可见
,
阅读 1
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
typedef long long LL; //经计算,总公里数、总油耗、总油费会爆Int
int v[N], a[N]; //分别对应站点距离和站点油价
int n, d; //站点数和每升油的前进距离
int price; //此站点前面可选的最低油价
int main(){
cin >> n >> d;
for(int i = 1; i < n; i++)
cin >> v[i];
for(int i = 1; i <= n; i++)
cin >> a[i];
LL dist = 0, oil = 0, ans = 0; // 分别对应到当前站点的总距离,已加的油量和总油费
//采用赊的方式,从第二个站点开始
price = a[1]; //对于第二个站点,别无选择,只能选第一个的油价
for(int i = 2; i <= n; i++){ //这里i要取到等号
dist += v[i - 1];
//(dist + d - 1) / d 是将对dist / d向上取整转化为向下取整
ans += ((dist + d - 1) / d - oil) * price;
price = min(price, a[i]);
oil += (dist + d - 1) / d - oil;
}
cout << ans << endl;
return 0;
}