题目大意:
一个打印机,打印一些东西。每个东西重要性不同(权值1~9),把这些东西放到一个队列中,如果第一个最重要则打印,否则放到队尾……
最后求耗时(打印多少次打印完指定东西)。
思路:
首先每次需要知道队里中的最大元素。首先想到的是STL中的优先队列priority_queue具体用法参见http://www.cplusplus.com/reference/queue/priority_queue/。
先把数据存在pq和qu两种队列中,cur记录的是目前打印的位置。然后进行模拟即可。最后输出的就是队列pop的个数加一。
代码
#include <queue>
#include <cstdio> /*freopen*/
#include <iostream>
using namespace std;
int main() {
//freopen("input.txt", "r", stdin);
int T;
cin >> T;
while(T--) {
queue<int> qu;
priority_queue<int> pq;
int n, m, cur;
cin >> n >> m;
for(int i = 0; i < n; i++) {
int t;
cin >> t;
qu.push(t);
pq.push(t);
}
cur = 0;
for(;;) {
if (pq.top() == qu.front()) {
if (m == cur) {
cout << n - pq.size() + 1 << endl;
break;
}
else {
pq.pop();
qu.pop();
cur++;
}
}
else {
int temp = qu.front();
qu.pop();
qu.push(temp);
if (m == cur) {
m = pq.size() - 1;
cur = 0;
}
else {
cur++;
}
}
}
}
return 0;
}