50pts
查看原帖
50pts
169594
Heart_Of_Iron_4楼主2023/4/7 23:40

rt

#include<bits/stdc++.h>
using namespace std;
double d1,c,a[20][10],d2,t2,t1,ans,maxx,oil;
int maxi,last,n,i,t3;
int main()
{
	scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&t1,&n);
//	printf("\n");
	n++;
	a[1][1]=0;
	a[1][2]=t1;
	for(i=2;i<=n;++i)scanf("%lf%lf",&a[i][1],&a[i][2]);
	for(i=1;i<=n;)
	{
		oil-=(a[i][1]-a[last][1])/d2;
	//	printf("%lf\n",oil);
		maxx=114514.0;maxi=0;
		for(int j=i+1;j<=n&&(a[j][1]-a[i][1])<=c*d2;++j)
		{
			if(maxx>a[j][2])
			{
				maxx=a[j][2];
				maxi=j;
			}
	//		printf("1:%d %lf %lf %d\n",j,a[j][1]-a[i][1],c*d2,maxi);
		}
		if(maxi==0)break;
		if(maxx>a[i][2])
		{
			ans+=(c-oil)*a[i][2];
			oil=c;
			last=i;
			i=maxi;
		}
		else
		{
			ans+=((a[maxi][1]-a[i][1])/d2-oil)*a[i][2];
			oil=(a[maxi][1]-a[i][1])/d2;
			last=i;
			i=maxi;
		}
	//	printf("%d %d %lf %lf\n",last,maxi,oil,ans);
	//	getchar();
	}
	if((d1-a[i][1])/d2>c)
	{
		printf("No Solution");
		exit(0);
	}
	ans+=((d1-a[i][1])/d2-oil)*a[i][2];
	t3=ans*1000;
	if(t3%10>=5)t3+=10;
	ans=t3/1000.0;
	printf("%.2lf",ans);
	return 0;
}
2023/4/7 23:40
加载中...