社区讨论

快条吐血了,HELP!

P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 3已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@m6q8n4ai
此快照首次捕获于
2025/02/04 16:49
去年
此快照最后确认于
2025/11/04 23:06
4 个月前
查看原帖
样例不过。。。。。。
CPP
#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;
}



回复

14 条回复,欢迎继续交流。

正在加载回复...