【 UVA - 12100 】Printer Queue 打印队列 (queue+priority_queue)

题目链接


一开始理解错了题目,队列中存在比队首优先级高的数,不需要打印,只需要放到最队尾即可。

只有在队首为最高优先级时,才需要打印。


代码:

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
int main()
{
    
    
	int t,n,m,x; 
	cin>>t;
	while(t--)
	{
    
    
		priority_queue<int,vector<int>,less<int> >p; //优先队列用来判断队列中是否有比队首大的数
		queue<int> q;
		int ans=0;
		cin>>n>>m;
		for(int i=0;i<n;i++)
		{
    
    
			cin>>x;
			q.push(x);
			p.push(x);
		}
		
		while(1)
		{
    
    
			int f=q.front();
			if(p.top()>f) //队列中有比队首优先级高的 需要将队首的数放到队尾
			{
    
    
				if(!m) m=q.size()-1; //目标在队首,更新目标位置
				else m--; //不在队首 目标往前一步
				q.pop();
				q.push(f); //队首放到队尾
			}
			else if(!m) break; //队首优先级最大 且为目标 直接结束
			else q.pop(),p.pop(),ans++,m--;  //队首优先级最大 ,打印出来,队列中pop掉该数,ans++,目标数m往前一步
		}
		
		cout<<ans+1<<endl; //加上目标值的打印
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108366684