#include<bits/stdc++.h>
using namespace std;
long long n,d,nl,sheng[10000005];
long long numl[10000005],ans;
struct node{
long long number;
long long price;
long long v;
}a[1000005];
bool cmp(node x,node y)
{
if(x.price!=y.price) return x.price<y.price;
else if(x.price==y.price&&x.number<y.number)
{
return x.price<y.price;
return x.number<y.number;
return x.v<y.v;
}
return x.number<y.number;
return x.v<y.v;
}
int vis[100000005];
int main()
{
//freopen("road.in","r",stdin);
//freopen("road.out","w",stdout);//cheer for yourselves
cin>>n>>d;
nl=n;
for(int i=1;i<=n-1;i++)
{
cin>>a[i].v;
numl[i+1]=a[i].v+numl[i];
}
for(int i=1;i<=n;i++)
{
cin>>a[i].price;
a[i].number=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].number<nl)
{
long long sl=numl[nl]-numl[a[i].number]-sheng[a[i].number];
sheng[a[i].number]=0;
if(sl%d==0)
{
ans+=(sl/d)*a[i].price;
}
else if(sl%d!=0)
{
ans+=(sl/d+1)*a[i].price;
sheng[a[i].number]+=sl%d;
}
nl=a[i].number;
}
if(nl==1) break;
}
cout<<ans<<endl;
return 0;
}
赛时代码,洛谷官方数据45,ccf0pts,不理解,完全不理解