题目大意:输入一串数字序列 每个数字代表优先级[1-9],数字越大优先级越高,从头到尾访问序列,当该数字是当前序列的最高优先级时就花费1分钟打印,如果不是最高优先级就将该数字放到序列尾部,输入指定位置,输出该位置数字打印出来时所花时间
解题思路:另外用一个数组保存全部优先级并且排序,然后直接用队列模拟即可
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
struct node {
int v;
int jud;
};
queue<node> que;
int ma[1000];
bool cmd(int a, int b) {
return a > b;
}
int main() {
int n;
int m, x;
cin >> n;
while(n--) {
while(!que.empty()) {
que.pop();
}
cin >> m >> x;
for(int i = 0; i < m; i++) {
cin >> ma[i];
node no;
no.v = ma[i];
if(i == x)
no.jud = 1;
else
no.jud = 0;
que.push(no);
}
sort(ma, ma+m, cmd);
int cou = 0, cou2 = 0;
while(1) {
node no = que.front();
if(no.jud == 1 && no.v == ma[cou2]) {
break;
}
que.pop();
if(no.v == ma[cou2]) {
cou2++;
cou++;
}
else {
que.push(no);
}
}
cout << cou+1 << endl;
}
return 0;
}