求助,50分
查看原帖
求助,50分
47205
jzy_go楼主2020/8/1 09:27
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+(ch-'0');
		ch=getchar();
	}
	return x*f;
}
struct node{
	double x,y;
}a[10001];
double ans=0;
int main()
{
	double d1,c,d2,p;
	int n;
	scanf("%lf%lf%lf%lf",&d1,&c,&d2,&p);
	n=read();
	a[0].x=0;
	a[0].y=p;
	a[n+1].x=d1;
	a[n+1].y=0;
	int step1=0;
	int step2=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&a[i].x);
		scanf("%lf",&a[i].y);
		step1=a[i].x;
		a[i].x=a[i].x-step2;
		step2=step1;
	}
	a[n+1].x=a[n+1].x-step2;
	double l=0;
	double cc=0;
	int ii;
	int minn=9999999;
	int min2=0;
	int ll=0;
	for(int i=0;i<n+1;)
	{
		minn=9999999;
		ii=i;
		l=0;
		min2=i;
		for(int j=i+1;j<=n+1;j++)
		{
			l=l+a[j].x;
			if(l>c*d2)
			{
				ans=ans+a[i].y*(c-cc);
				cc=c;
				cc=cc-ll/d2;
				i=min2;
				break;
			}
			if(a[i].y>=a[j].y)
			{
				ans=ans+a[i].y*max((double)0,l/d2-cc);
				cc=cc+max((double)0,l/d2-cc);
				cc=cc-l/d2;
				i=j;
				break;
			}
			if(minn>a[j].y)
			{
				minn=a[j].y;
				min2=j;
				ll=l;
			}
		}
		if(ii==i)
		{
			cout<<"No Solution";
			return 0;
		}
	}
	printf("%.2lf",ans);
	return 0;
}

整体思路和第一篇题解差不多,但是只有五十分,求大佬帮助

2020/8/1 09:27
加载中...