J组T2 15pts求调
  • 板块学术版
  • 楼主StormWhip
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/22 16:08
  • 上次更新2023/10/22 16:42:02
查看原帖
J组T2 15pts求调
564524
StormWhip楼主2023/10/22 16:08
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
long long n,d;
long long v[N],a[N];//v是当前站与下一站的距离,a是当前站加油的价格 
long long t=1,lasts;//t记录哪一站的油价最低,lasts记录当前剩余的油可走的路程  
long long ans;//记录总价格 
int main()
{
	scanf("%lld%lld",&n,&d);
	for(int i=1;i<n;i++) scanf("%lld",&v[i]);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	for(int i=1;i<n;i++)
	{
		if(a[t]<a[i])
		{
			int k=v[i]-lasts;
			if(k%d==0)
			{
				ans+=k/d*a[t];
				lasts=0;
			}
			else
			{
				ans+=(k/d+1)*a[t];
				lasts=(k/d+1)*d-v[i];
			}
		}
		else
		{
			t=i;
			int k=v[i]-lasts;
			if(k%d==0)
			{
				ans+=k/d*a[i];
				lasts=0;
			}
			else
			{
				ans+=(k/d+1)*a[i];
				lasts=(k/d+1)*d-v[i];
			}
		}
		//printf("当前在第%d站,第%lld站油价最低,目前总价格%lld元,多出的油可行驶%lld公里\n",i,t,ans,lasts);
	}
	cout<<ans<<endl;
	return 0;
}

只有vi是d的倍数的三个点对了,估计是lasts计算的问题。

2023/10/22 16:08
加载中...