大佬求调,最后一点wa
查看原帖
大佬求调,最后一点wa
948336
2206GZ楼主2023/11/6 17:46
#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,p,s,t,k,u;
int n,o=1;
struct f
{
	double d,pp;
}x[10];
inline long long read()
{
	long long x=0,f=1;
	char c=getchar();
	while(c>'9'||c<'0')
	{
		if(c=='-')
		f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
}
int main()
{
	cin>>d1>>c>>d2>>p>>n;
	k=c*d2;
	for(int i=1;i<=n;i++)
	cin>>x[i].d>>x[i].pp;
	x[0].pp=p;
	if(d1-x[n].d>c*d2)
	{
		cout<<"No Solution"<<endl;
		return 0;
	}
	if(n==0) 
	{
		printf("%0.2f",d1/d2*p);
		return 0;
	}
	while(s<d1)
	{
		double minn=1000.0;
		for(int i=o;i<=n;i++)
		if(x[i].d<=k+s)
		{
			if(x[i].pp<p)
			{
				o=i;
				u=x[i].d;
				break;
			}
			if(x[i].pp<minn)
			{
				minn=x[i].pp;
				o=i;
			}
		}
		if(x[o].pp<p)
		{
			t+=(u-s)/d2*p;
			s=u;
			p=x[o].pp;
		}
		else 
		{
			t+=p*c;//+(x[o].d-s)/d2*x[o].pp;
			p=x[o].pp; 
			s+=k;
		}
		if(k+s>=d1)
		{
			int flag=1;
			for(int i=o;i<=n;i++)
			if(x[i].pp<x[o].pp)
			{
				flag=0;
				o=i;
				t+=(x[i].d-s)/d2*p;
				s=x[i].d;
				p=x[i].pp;
				break;
			}
			if(flag==1)
			{
				t+=(d1-s)/d2*p;
				break;
			}
		}
	}
	printf("%0.2f",t);	
}
2023/11/6 17:46
加载中...