蒟蒻求助
查看原帖
蒟蒻求助
381641
Thunderbolt_General楼主2023/10/10 20:51
#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,p;
int n;
struct sb{
	double dis,pri;
}a[10];
void search(double money,int x,double res)
{
	double maxn=a[x].pri,minn=1e7;
	if(x==n){
		money+=double((double((d1-a[x].dis)/d2)-res)*a[x].pri);
		printf("%.2lf",money);
		return;
	}
	if(a[x+1].dis>a[x].dis+c*d2)
	{
		printf("No Solution");
		return;
	}
	int i=x+1,k,l;
	while(a[i].dis<=a[x].dis+c*d2&&i<=n)
	{
		if(a[i].pri<maxn)
		{
			maxn=a[i].pri;
			k=i;
			break;
		}
		if(a[i].pri<minn)
		{
			minn=a[i].pri;
			l=i;
		}
		i++;
	}
	if(maxn==a[x].pri)
	{
		money+=double((c-res)*a[x].pri);
		res=c-double((a[l].dis-a[x].dis)/d2);
		search(money,l,res);
	}
	else {
		money+=double((double((a[k].dis-a[x].dis)/d2)-res)*a[x].pri);
		cout<<money<<" "<<k<<" "<<res<<endl;
		search(money,k,0);
	}
	return;
}
int main()
{
	cin>>d1>>c>>d2>>p>>n;
	if(n==0)
	{
		if(c*d2<d1)
		printf("No Solusion");
		else printf("%.2lf",d1/d2*p);
		return 0;
	} 
	a[0].pri=p;
	for(int i=1;i<=n;i++)
	cin>>a[i].dis>>a[i].pri;
	search(0,0,0);
}

第四组数据

87.75 13.03 5.75 7.29 3

22.10 7.38

24.21 6.81

82.08 6.96

正确答案 105.95,我的105.65

2023/10/10 20:51
加载中...