社区讨论

20pts dalao求调

P9749[CSP-J 2023] 公路参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lok6ohpw
此快照首次捕获于
2023/11/04 23:12
2 年前
此快照最后确认于
2023/11/05 09:43
2 年前
查看原帖
贪心:每次找他后面第一个比他小的节点
C
#include<iostream>
#include<cmath>
#define l long long
#define N int(1e5+10)
using namespace std;
l read(){
	l x=0;
	short f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-f;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c^'0');
		c=getchar();
	}
	return x*f;
}
void write(l x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	short stk[20],top=0;
	do{
		stk[top++]=x%10;
		x/=10;
	}while(x);
	while(top)putchar(stk[--top]^'0');
}
l n,d,v[N],a[N],minn[N],cnt=0,vv=0;
int main(){
	n=read();
	d=read();
	for(int i=1;i<n;i++)v[i+1]=read(),v[i+1]=v[i]+v[i+1];
	for(int i=1;i<=n;i++)a[i]=read();
	minn[n]=n;
	for(int i=n-1;i>=1;i--){
		if(a[i]>a[i+1]){
			minn[i]=i+1;
			continue;
		}
		minn[i]=minn[i+1];
	}
	for(int i=1;i<n;){
		int gg=ceil((v[minn[i]]-v[i]-vv)/(d*1.0));
		cnt+=gg*a[i];
		vv=gg*d-(v[minn[i]]-v[i]-vv);
		i=minn[i];
	}
	write(cnt);
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...