思路:按照输入的顺序,将每个任务入队,同时用另一个数组保存这些优先级,然后按照从大到小或者从小到大的顺序对数组排序,表示每个执行的先后顺序。然后对队列进行操作,先从队列头取出一个元素,判断是不是和数组的下标指向的值相等,若相等,则打印的时间数+1,同时数组下标+1或者-1,若不相等,则直接扔到队尾,重新开始下一次循环。
(开始理解错题意,认为是把队列中优先级最高的任务直接移除,而忽略了队列只能一个一个的出)
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
while(t--!=0){
int n = scan.nextInt();
int m = scan.nextInt();
Queue<Num> q = new LinkedList<>();
int[] A = new int[n];
for(int i=0;i<n;i++){
int p = scan.nextInt();
Num num = new Num(p,i);
q.add(num);
A[i] = p;
}
Arrays.sort(A);
int j = n-1;
int cnt = 0;
boolean ok = false;
while(!ok){
Num num = q.peek();
q.poll();
if(num.value==A[j]){
cnt++;
j--;
if(num.pos==m){
ok = true;
}
}else{
q.add(num);
}
}
System.out.println(cnt);
}
}
static class Num{
int value;
int pos;
public Num(int value,int pos){
this.value = value;
this.pos = pos;
}
}
}