1. 程式人生 > >UVA12100-列印佇列

UVA12100-列印佇列

題目大意:

現在有一個列印佇列,裡面的任務是無序的,每個任務有一個權值,印表機會從第一個任務開始執行,如果當前任務的權值是佇列中最大的,那麼就列印,否則就將該任務放置到隊末。每次列印消耗一定的時間,求該序列中的任務分別在什麼時候被列印。

這題開一個優先佇列一個普通佇列,佇列裡的元素出隊,如果出隊元素和優先佇列隊首元素相同就執行“列印”操作,否則就扔到隊尾。

#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int num, index;
		queue<int> q;
		priority_queue<int> pq;
		cin>>num>>index;
		for(int j=0;j<num;j++)
		{
			int rate;
			cin>>rate;
			pq.push(rate);
			q.push(rate);
		}
		int x = 0;
		while(true)
		{
			if(q.front()==pq.top())
			{
				if(x==index)
				{
					cout<<num-q.size()+1<<endl;
					break;
				}
				else
				{
					q.pop();
					pq.pop();
					x++;
				}
			}
			else
			{
				int temp = q.front();
				q.pop();
				q.push(temp);
				if(x==index)
				{
					x=0;
					index=q.size()-1;
				}
				else
				{
					x++;
				}
			}
		}
	}
	return 0;
}