原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3252
这题可以建立两个队列,一个为优先级队列,当两者队首相同时就出队列,否则将队首放到队尾。
1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 5 queue<int> p; 6 priority_queue<int>pq; 7 8 int main() 9 { 10 int t, n, m, i, j, k; 11 cin >> t; 12 while (t--) 13 { 14 cin >> n >> m; 15 k = n; 16 while (!p.empty()) p.pop(); 17 while (!pq.empty()) pq.pop(); 18 while (n--) 19 { 20 cin >> i; 21 p.push(i); 22 pq.push(i); 23 } 24 int count = 0; 25 for (int i = 0; i <= m; i++) 26 { 27 if (p.front() != pq.top()) 28 { 29 j = p.front(); 30 p.push(j); 31 p.pop(); 32 if (i == m) m = m + k; //如果第m个关注的任务不能打印,则在循环k次 33 } 34 else 35 { 36 p.pop(); 37 pq.pop(); 38 count++; 39 k--; 40 } 41 } 42 cout << count << endl; 43 } 44 return 0; 45 }