csp-j T2为什么只有40分
基础思路:买多少油取决于下一个比它便宜的加油站的地方的距离
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,d;
cin>>n>>d;
int v[n+10],a[n+10];
long long qian[n+10];//前缀和
qian[0]=0;
for(int i=1;i<n;i++) cin>>v[i],qian[i]=qian[i-1]+v[i-1];
qian[n]=qian[n-1]+v[n-1];
for(int i=1;i<=n;i++) cin>>a[i];
int now=0;//还能走now(km)
int ans=0;//已经花的钱
for(int i=1;i<n;){
int j;
for(j=i;j<=n;j++){
if(a[j]<a[i]) break;//比i便宜
}
j=min(j,n);//防止j=n+1
int juli=qian[j]-qian[i]-now;//还能走now千米,所以要减去
ans+=(juli+d-1)/d*a[i];//(juli/d)向上取整*a[i]
now=(juli+d-1)/d*d-(juli);//可能不是整数,所以要向上取整后再乘
i=j;//走到j
}
cout<<ans;
return 0;
}