求助
查看原帖
求助
143925
吴勉之楼主2020/8/22 16:39

这题的题解大部分都是用sort和数组来模拟queue和priority_queue
问一下能不能直接用queue和priority_queue
写了一份代码,错的,样例都过不去55555
求查错

#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,q,t,sum;
double p;
priority_queue<int>pq,ans;
queue<int>cut[2];
int main()
{
	scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
	p=double(u/v);
	for(int i=1,now;i<=n;i++)
	{
		scanf("%d",&now);
		pq.push(now);
	}
	for(int i=1,top;i<=m;i++)
	{
		if(pq.empty())
		{
			if(cut[0].front()>cut[1].front())
			{
				top=cut[0].front();
				cut[0].pop();
			}
			else
			{
				top=cut[1].front();
				cut[1].pop();
			}
		}
		else if(pq.top()>=cut[0].front()&&pq.top()>=cut[1].front())
		{
			top=pq.top();
			pq.pop();
		}
		else if(cut[0].front()>=cut[1].front()&&pq.top()<=cut[0].front())
		{
			top=cut[0].front();
			cut[0].pop();
		}
		else
		{
			top=cut[1].front();
			cut[1].pop();
		}
		//cout<<top<<' ';
		top+=sum;
		int c1=floor(p*double(top)),c2=top-c1;
		sum+=q;
		c1-=sum;
		c2-=sum;
		cut[0].push(c1);
		cut[1].push(c2);
		if(i%t==0)printf("%d ",top);
	}
	puts("");
	while(!pq.empty())
	{
		ans.push(pq.top());
		pq.pop();
	}
	while(!cut[0].empty())
	{
		ans.push(cut[0].front());
		cut[0].pop();
	}
	while(!cut[1].empty())
	{
		ans.push(cut[1].front());
		cut[1].pop();
	}
	for(int i=1;!ans.empty();i++)
	{
		if(i%t==0)printf("%d ",ans.top()+sum);
		ans.pop();
	}
	puts("");
	return 0;
}
/*
3 7 1 1 3 1
3 3 2
*/
2020/8/22 16:39
加载中...