85分求调
查看原帖
85分求调
1074679
DerFuehrerDerSIP楼主2024/10/5 10:28

n,d,{vi},{ai}同题意{fi}:=k=inext stopvkcur:=i,i点停靠加油cost:=花费,ı.e.最终答案vol:=剩余油量n,d,\{v_i\},\{a_i\}同题意\\ \{f_i\}:=\displaystyle\sum_{k=i}^\text{next stop}{v_k}\\ \text{cur}:=i,在i点停靠加油\\ \text{cost}:=花费,\text{\i.e.}最终答案 \text{vol}:=剩余油量\\

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,d,v[N],a[N],cur;
unsigned long long f[N],cost;
double vol;
int main() {
	scanf("%d%d",&n,&d);
	for (int i=1; i<n; i++) scanf("%d",&v[i]);
	for (int i=1; i<=n; i++) scanf("%d",&a[i]);
	f[1]=v[1],cur=1;
	for (int i=2; i<=n; i++) {
		if (a[cur]>a[i]) f[i]=v[i],cur=i;
		else f[cur]+=v[i];
	} for (int i=1; i<=n; i++) {
		cost+=a[i]*ceil(f[i]*1.0/d-vol);
		vol=ceil(f[i]*1.0/d-vol)-f[i]*1.0/d+vol;
	} printf("%d\n",cost);
	return 0;
}
2024/10/5 10:28
加载中...