求助,悬赏一关
查看原帖
求助,悬赏一关
796977
114514_10086楼主2023/6/22 21:08
#include<bits/stdc++.h>
using namespace std;
struct node{
	double d,p;
};
node a[10];
int n;
double l,c,d,p,dis,cnow=0,money=0;
bool cmp(node a,node b)
{
	return a.d<b.d;
}
int main()
{
	cin>>l>>c>>d>>p>>n;
	for(int i=1;i<=n;i++) cin>>a[i].d>>a[i].p;
	sort(a,a+n+1,cmp);
	a[n+1].p=0;
	a[n+1].d=l;
	dis=c*d;
	for(int i=0;i<=n;i++)
	{
		if(a[i+1].d-a[i].d>dis) 
		{
			cout<<"No Solution";
			return 0;
		}
		int k=-1;
		for(int j=i+1;j<=n;j++)//寻找比本站更便宜的最近的加油站 
		{
			if(a[j].d-a[i].d<dis && a[j].p<a[i].p)
			{
				k=j;
				break;
			}
		}
		if(k==-1)//如果没有,那么把油加满 
		{
			money+=(c-cnow)*a[i].p;
			cnow=c;
		}
		else
		{
			if((a[k].d-a[i].d)/d<=cnow)//如果剩余油量够到达,那么用剩余油开车 
			{
				cnow-=(a[k].d-a[i].d)/d;
				i=k-1;
			}
			else//如果剩下的油量不够到达,就把油加到刚好到下一站的油 
			{
				money+=((a[k].d-a[i].d)/d-cnow)*a[i].p;
				cnow=0;
				i=k-1;
			}
		}
	}
	cout<<fixed<<setprecision(2)<<money;
	return 0;
}

代码如上,思路看上去没有错,但是样例还是 一直错,求大佬指出错误

2023/6/22 21:08
加载中...