快条吐血了,HELP!
查看原帖
快条吐血了,HELP!
1234924
lsd110504lsd楼主2025/2/4 16:47

样例不过。。。。。。

#include<iostream>
#include<cstdio>
#include<deque>
float d1,c,d2,p,n;
const int N=500+10;
float P[N],D[N],how_add[N],exchange,ans;
using namespace std;
deque<int> deq;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>d1>>c>>d2>>p>>n;
	deq.push_back(0);
	P[0]=p;
	how_add[0]=c;
	for(int i=1;i<=n;i++)
	{
		cin>>D[i]>>P[i];
		D[i]=D[i]-D[i-1];
		if(D[i]>c*1.0/d2)
		{
			cout<<"No Solution";
			return 0;
		}
		else
		{
			while(D[i])
				if(D[i]<how_add[deq[0]]*1.0/d2)
				{
					how_add[deq[0]]-=D[i]*1.0/d2;
					exchange+=D[i]*1.0/d2;
					goto qq;
				}
				else
				{
					D[i]-=how_add[deq[0]]*1.0/d2;
					exchange+=how_add[deq[0]]*1.0/d2;
					deq.pop_front();
				}
		}
		qq:
			;
		while(P[i]<P[deq.size()-1])
		{
			ans-=how_add[deq.size()-1]*P[deq.size()-1];
			exchange+=how_add[deq.size()-1];
			deq.pop_back();
		}
		ans+=exchange*P[i];
		deq.push_back(i);
		how_add[i]=exchange;
	}
	while(!deq.empty()){
		ans-=how_add[deq.size()-1]*P[deq.size()-1];
		deq.pop_back();
	}
	printf("%.2f",ans);
	return 0;
}



2025/2/4 16:47
加载中...