- 用优先级队列自动排序找出最高的优先级任务
- 只有打印出任务的时候才累加计数器
- 若当前打印的是“自己的”,则输出计数器
#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;
}