CSP-JT2,85求调
  • 板块学术版
  • 楼主MorLeaves
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/24 22:29
  • 上次更新2023/11/2 11:30:54
查看原帖
CSP-JT2,85求调
877691
MorLeaves楼主2023/10/24 22:29
#include<iostream>
#include<cstdio>
typedef long long ll;
using namespace std;
int v[100005],a[100005];
ll ceil(ll x,ll y)
{
	return x%y==0?x/y:x/y+1;
}
int main()
{
//	freopen("road.in","r",stdin);
//	freopen("road.out","w",stdout);
	int n,d,minn=2147483647;
	ll s=0,t=0,now=0;
	scanf("%d %d",&n,&d);
	for(int i=1;i<=n-1;i++)
	{
		scanf("%d",&v[i]);
		t+=v[i];
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if (i!=n)
		{
			minn=min(minn,a[i]);
		}
	}
	if (a[1]==minn)
	{
		printf("%lld",ceil(t,d)*minn);
		return 0;
	}
	for(int i=1;i<=n-1;i++)
	{
		ll p=v[i]-now,q,sum=0;
		int k=i+1;
		s+=ceil(p,d)*a[i];
		now=ceil(p,d)*d-p;
		while(a[k]>=a[i]&&k<=n-1)
		{
			sum+=v[k];
			k++;
		}
		if (k>i+1)
		{
			q=sum-now;
			s+=ceil(q,d)*a[i];
			now=ceil(q,d)*d-q;
		}
		i=k-1;
	}
	printf("%lld",s);
	return 0;
}
2023/10/24 22:29
加载中...