听说灌水区大佬多(CSPJt2 90pts)
  • 板块灌水区
  • 楼主The_Chariot
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/29 11:32
  • 上次更新2023/11/2 10:56:16
查看原帖
听说灌水区大佬多(CSPJt2 90pts)
696391
The_Chariot楼主2023/10/29 11:32
#include<bits/stdc++.h>
using namespace std;
struct node{
	long long dis,dj; 
}a[100005];//存距离和油价 
int main()
{
	//freopen("road.in","r",stdin);
	//freopen("road.out","w",stdout);
	long long n,m;
	cin>>n>>m;//n为站点个数,m为每升油可走路程 
	a[1].dis=0;
	for(long long i=2;i<=n;i++)
	{
		long long x;
		cin>>x;
		a[i].dis=a[i-1].dis+x;//前缀和记录 
	}
	for(int i=1;i<=n;i++)
	{
		long long x;
		cin>>x;
		a[i].dj=x;//记录单价 
	}
	long long i=1,lc=0,sum=0;
	//i计数,lc表示到达下一个站点后还可走的路程,sum表示结果 
	while(i!=n)//未到终点一直查找 
	{
		long long oldi=i,min_dj=a[i].dj;
		bool cmp=0;
		//oldi表示当前起点,min_dj表示最近的单价比当前小的站点单价 
		while(min_dj<=a[i].dj)//一直检测到有比它小的出现 
		{
			i++;
			if(i==n) break;//特判已到终点 
		}
		long long k=(a[i].dis-a[oldi].dis-lc)/m+((a[i].dis-a[oldi].dis-lc)%m!=0);//k:买多少升油 
		sum+=k*a[oldi].dj; //加钱 
		lc=a[oldi].dis+lc+k*m-a[i].dis;//更新lc 
	}
	cout<<sum;
	return 0;
}
2023/10/29 11:32
加载中...