UVA 12100 Printer Queue

STL队列模拟。有无优先任务可以在读入时,直接对不同优先级的任务计数,然后得到当前的最高优先级直接判断。目标任务直接+10标记了。

#include <iostream>
#include <cstring>
#include <queue>

using namespace std;
queue<int> tasks;

int main() {
    int kase, n, m, cur, taskCnt[10], curPri, t;
    cin >> kase;
    while (kase--) {
        tasks = queue<int>(); curPri = 10; t = 0;
        memset(taskCnt, 0, sizeof(taskCnt));
        cin >> n >> m;
        for (int i = 0; i < n; i++) {
            cin >> cur; taskCnt[cur]++;
            tasks.push(cur + (i == m? 10: 0));
        }
        while (curPri > 1 && taskCnt[--curPri] == 0);
        while (!tasks.empty() && curPri > 0) {
            cur = tasks.front(); tasks.pop();
            if (cur % 10 < curPri) {
                tasks.push(cur);
            } else {
                t++; // printed
                if (cur > 10)
                    break;
                if (--taskCnt[cur] <= 0)
                    while (curPri > 1 && taskCnt[--curPri] == 0);
            }
        }
        cout << t << endl;
    }
    return 0;
}

发布者:KAAAsS

喜欢二次元的程序员,喜欢发发教程,或者偶尔开坑。(←然而并不打算填)

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注