sicily 1443 Printer Queue

//由于本人并不是为了刷题而做,只不过是复习一下各种数据结构的用法,因此使用了效率较低的数组来实现队列。
//该算法超时。在此方法中使用数组来实现队列,出队列和如队列的工作就是移动数组实现。
//在本方法中,有一个比较好的想法就是记录优先级,免去了每次都需要比较当前最高优先级。
#include <iostream>

using namespace std;

const int Jobs=100;

typedef struct node{

	int pri;

	int ind;

}Node;

int main()

{

 	int n;

	cin>>n;

	Node que[Jobs];

	

	int time;

	while(n--)

	{

	 	int count,index;

		cin>>count>>index;

		//浮标,队列头和尾部初始化 

		int head=0,tail=count-1; 

		time=0;

		int pri[10]={0};//优先级数组,省去判断每次最高优先级是哪一级 

		for(int i=0;i<count;i++)

		{

		 	cin>>que[i].pri;

			pri[que[i].pri]++;//表示每个优先级有多少个任务 

			que[i].ind=i;

		}

		//从优先级最高开始出列 

		int i=9;

		while(i>0)

		{

		 	//cout<<i<<"***";

		 	//表示属于当前优先级的任务是否都已经出列 

		 	if(pri[i]==0)

			{

			 	i--;

			}

			else

			{

			 	while(que[head].pri!=i)

				{

				 	if(tail==Jobs)

					{

					 	tail=0;

						que[tail]=que[head];	

					}

					else

					{

					 	tail++;

						que[tail]=que[head];

					}

					if(head==Jobs)

					{

						head=0;

					}

					else

					{

					 	head++;

					}	

				}

				//找到最高优先级的,出列,并判断是目标任务

				if(que[head].ind==index)

				{

				 	cout<<++time<<endl;

					break;

				} 

				else

				{

				 	if(head==Jobs)

					{

					 	head==0;

					}

					else

					{

					 	head++;

					}

				}

			 	time++;

	

				pri[i]--;

			}

			

		}

		 

	}

 	return 0;

}

 

你可能感兴趣的:(Queue)