帮忙看看我家孩子的CSP-J T2 50pts
  • 板块学术版
  • 楼主YouF
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/26 16:12
  • 上次更新2023/11/2 11:20:53
查看原帖
帮忙看看我家孩子的CSP-J T2 50pts
1113427
YouF楼主2023/10/26 16:12
#include<bits/stdc++.h>
using namespace std;
long long n,d,a[10001],v[10001],f[10001],sheng,sum,t;
struct num{
	long long x,id;
};
stack<num>s;
int main()
{
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	scanf("%lld%lld",&n,&d);
	for(long long i=1;i<n;i++)scanf("%lld",&v[i]);
	for(long long i=1;i<=n;i++)scanf("%lld",&a[i]);
	for(long long i=1;i<n;i++)v[i]+=v[i-1];
	for(long long i=1;i<=n;i++){
		while(!s.empty()&&a[i]<s.top().x)f[s.top().id]=i,s.pop();
		s.push((num){a[i],i});
	}
	for(long long i=1;i<=n;i++)if(f[i]==0)f[i]=n;
	
	for(long long i=1;i!=n;i=f[i]){
		t=max(0ll,(v[f[i]-1]-v[i-1]-sheng+d-1)/d);
		sum+=t*a[i];
		sheng=d*t-(v[f[i]-1]-v[i-1]-sheng);
	}
	printf("%lld",sum);
	return 0;
}
2023/10/26 16:12
加载中...