1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7 /** 8 题意:所有任务在队列中,若当前打印的任务优先级不是最大,则移动到队列尾部。问下标为k的任务在什么时刻被打印; 9 思路:用优先队列判断优先级是否最高。用队列模拟任务 10 (1)若队列前面的任务 不是 优先级最高 11 任务移到末尾 12 下标k-- (若 k = 0 , k = queue.size()-1 ) 13 (2)若队列前面的人物 是 优先级最高 14 打印任务。 15 若下标k == 0 输出答案 16 若k!=0 k-1 , time++; 17 18 */ 19 int n,index; 20 21 void solve(){ 22 int ans = 1; 23 priority_queue<int> pq; 24 queue<int> que; 25 for(int i = 0 ; i < n ; i ++){ 26 int tmp; 27 scanf("%d",&tmp); 28 que.push(tmp); 29 pq.push(tmp); 30 } 31 for(;;){ 32 if(que.front() == pq.top()){ 33 if(index == 0){ 34 printf("%d\n",ans); 35 break; 36 }else{ 37 que.pop(); 38 pq.pop(); 39 index --; 40 } 41 ans ++; 42 }else{ 43 int tmp = que.front(); 44 que.pop(); 45 que.push(tmp); 46 if(index == 0) index = que.size() - 1; 47 else index --; 48 } 49 } 50 } 51 52 int main(){ 53 54 int T; 55 scanf("%d",&T); 56 while(T--){ 57 scanf("%d%d",&n,&index); 58 solve(); 59 } 60 return 0; 61 }
时间: 2024-12-17 10:58:55