您的位置:首页 > 产品设计 > UI/UE

sicily--1443. Printer Queue

2012-07-28 11:27 211 查看
用优先级队列自动排序找出最高的优先级任务
只有打印出任务的时候才累加计数器
若当前打印的是“自己的”,则输出计数器

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

struct node
{
int priority;
bool mark;
};

int main()
{
int caseNum;
cin >> caseNum;
while(caseNum--)
{
int jobs;
cin >> jobs;
int myJob;
cin >> myJob;
priority_queue<int,vector<int> > sorted;//优先级队列,用以排序

queue<node> unsorted;//存储打印机内信息
for(int i = 0; i < jobs; i++)
{
node newNode;
int priority;
cin >> priority;
if(i == myJob)
{
newNode.mark = true;//有标记的为“自己”的
newNode.priority = priority;
}
else
{
newNode.mark = false;
newNode.priority = priority;
}
sorted.push(priority);
unsorted.push(newNode);
}
int count = 0;//时间花费
while(!unsorted.empty())
{
int max = sorted.top();//找出最大的“优先级”
node temp = unsorted.front();//排在最前的任务
if(temp.priority == max)//轮到该任务
{
sorted.pop();
unsorted.pop();
count++;
if(temp.mark == true)
break;
}
else
{
unsorted.pop();
unsorted.push(temp);
}

}
cout << count << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: