本题运用优先列队priQ判断是否有比当前任务优先级高的任务存在, 队列q用来模拟题目的情况,将当前任务放置在队列末尾,
同时min变量记录所花时间, pos变量记录自己的任务在队列的哪个位置
优先级队列定义如下priority_queue<int,vector<int>,less<int> > 表示的是降序排列,若需要升序,则将less改为greater
sicily上提交时 priority_queue<int,vector<int>,less<int>> priQ;这样报错,报错的是less<int>>后面两个">>"号不能连在一起
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int testCase;
cin >> testCase;
while (testCase--){
int count, pos;
cin >> count >> pos;
priority_queue<int,vector<int>,less<int> > priQ;
queue<int> q;
int temp;
for (int i = 0 ; i < count; i++){
cin >> temp;
q.push(temp);
priQ.push(temp);
}
int min = 0;
while (pos != -1){
if (q.front() == priQ.top()){ //优先级高,可以打印
min++;
pos--;
q.pop();
priQ.pop();
}
else { //有优先级比当前高的,需要放到队列末尾
q.push(q.front());
q.pop();
pos--;
if (pos == -1)
pos = q.size() - 1;
}
}
cout << min << endl;
}
return 0;
}