题目地址:http://soj.me/1443
这是一道有关队列的题目,要模拟操作很简单,但是job的优先级可能相同,最后一个用例:1 1 9 1 1,第一个优先级为1的才是要求的job,然后我用了一个结构体来标记那个job,在模拟过程:
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct job {
int priority;
bool is_my_job;
job(int priority_, bool is_my_job_) : priority(priority_), is_my_job(is_my_job_) {}
};
int main() {
int N;
cin >> N;
while (N--) {
int num, position;
queue<job> que;
cin >> num >> position;
vector<int> vt;
for (int i = 0; i < num; i++) {
int p;
cin >> p;
vt.push_back(p);
bool is_my_job = false;
if (i == position)
is_my_job = true;
que.push(job(p, is_my_job));
}
sort(vt.begin(), vt.end());
int count_ = 0;
while (1) {
job temp = que.front();
if (temp.priority < *(vt.end()-1)) {
que.pop();
que.push(temp);
} else {
que.pop();
vt.erase(vt.end()-1);
count_++;
if (temp.is_my_job)
break;
}
}
cout << count_ << endl;
}
return 0;
}