求助!最后一个点WA(玄关)
查看原帖
求助!最后一个点WA(玄关)
727172
Nake_fu楼主2024/8/6 12:18
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10;
struct node{
	double d,p;
}a[N];
double c,v,ans,sum,x,t;
int n,p1=0,p2; 
bool f=0;
bool cmp(node x,node y)
{
	return x.d<y.d;
}
signed main()
{
	cin>>x>>c>>v>>a[0].p>>n;
	a[0].d=0;
	a[n+1].d=x;
	a[n+1].p=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].d>>a[i].p;
	}
	sort(a+0,a+n+2,cmp);
	sum=c*v;
	for(int i=1;i<=n+1;i++)
	{
		if(a[i].d-a[i-1].d>sum)
		{
			cout<<"No Solution";
			return 0;
		}
	}
	while(1)
	{
		f=0;
		if(p1==n+1)
		{
			cout<<fixed<<setprecision(2)<<ans;
			return 0;
		}
		for(int i=p1+1;i<=n+1;i++)
		{
			if(a[i].p<=a[p1].p && c*v>=(a[i].d-a[p1].d))
			{
				//cout<<1<<endl;
				ans+=((a[i].d-a[p1].d)/v-t)*a[p1].p;
				t=0;
				p1=i;
				f=1;
				break;
			}
		}
		if(!f)
		{
			sum=c*v;
			x=a[p1+1].p;
			p2=p1+1;
			/*for(int i=p1+1;i<=n+1;i++)
			{
				//cout<<d[i]-d[p1]<<endl;
				if(a[i].d-a[p1].d<=sum)
				{
					p2=max(i,p2);
					f=1;	 
				}else{
					break;
				}
			} 
			*/
			for(int i=p1+2;i<=n+1;i++)
			{
				if(sum>=a[i].d-a[p1].d && a[i].p<x)
				{
					p2=i;
					x=a[p2].p;
				}
			}
			ans+=(c-t)*a[p1].p;
			t=c-(a[p2].d-a[p1].d)/v;
			p1=p2;
		}
		if(!f)
		{
			cout<<"No Solution";
			return 0;
		}
		if(p1==n+1)
		{
			cout<<fixed<<setprecision(2)<<ans;
			return 0;
		}
		//cout<<p1<<" "<<ans<<endl;
	} 
	return 0;
}
2024/8/6 12:18
加载中...