社区讨论

75pts WA on #5求条

P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkia3i18
此快照首次捕获于
2026/01/17 20:23
上个月
此快照最后确认于
2026/01/17 23:12
上个月
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
double s,c,l;
double ans=0;
double nowc;//表示当前油量
double d[10],p[10],cd[10];
int n;
int main()
{
	cin>>s>>c>>l>>p[0]>>n;
	for(int i = 1;i <= n;i++)
	{
		cin>>d[i]>>p[i];
		cd[i]=d[i]-d[i-1];
	}
    d[n+1]=s;
	cd[n+1]=s-d[n];
	for(int i = 1;i <= n+1;i++)//判断能否到达
	{
		if(cd[i]>c*l)
		{
			cout<<"No Solution";
			return 0;
		}
	}
	for(int i = 0;i <= n;i++)
	{
		int nextlower;//到达终点一定比他便宜
		double distancelower;//距离
		for(int j = i+1;j <= n+1;j++)
		{
			if(p[j]<p[i])//比当前便宜
			{
				nextlower=j;
				break;
			}
		}
		distancelower=d[nextlower]-d[i];
		//可以直接一口气冲到下一个比当前便宜的加油站
		//把油加到刚刚好到地
		if(distancelower<=c*l)
		{
            // cout<<nowc<<" "<<distancelower<<"\n";
			ans+=min(c-nowc,1.0*distancelower/l)*p[i];
			nowc=0;
            i=nextlower-1;
            nowc=0;
		}
		else //把油加满,
		{
			ans+=(c-nowc)*p[i];
            nowc=c-cd[i+1]/l;
        }
	}
	printf("%.2f",ans);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...