UVA12100 Printer Queue

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
struct mknode{
    int pri;
    bool mark;
    mknode(int pri,bool mark):pri(pri),mark(mark){}
};
int main(){
    //freopen("input.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        queue<mknode> q;
        map<int,int> pri_cnt;
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++){
            int pri;
            cin>>pri;
            if(pri_cnt.count(pri)==0){
                pri_cnt[pri]=1;
            }else{
                pri_cnt[pri]++;
            }
            q.push(mknode(pri,i==m));
        }
        int time=0;
        while(true){
            struct mknode node = q.front();
            bool isContinue=false;
            for(map<int,int>::iterator it=pri_cnt.begin();it!=pri_cnt.end();it++){
                if(it->first>node.pri){
                    q.pop();
                    q.push(node);
                    isContinue=true;
                    break;
                }
            }
            if(isContinue) continue;
            if(node.mark){
                cout<<++time<<endl;
                break;
            }
            q.pop();
            ++time;
            pri_cnt[node.pri]-=1;
            if(pri_cnt[node.pri]==0){
                pri_cnt.erase(node.pri);
            }
        }
    }
}
  • 队列没有迭代器,无法对queue进行遍历。
  • 使用构造函数创建一个结构体类型的变量struct mknode node = mknode(pri, i == m),首先先是左边的声明,然后是右边的调用构造函数。
  • map中删除一个键,使用erase
上一篇:c


下一篇:c – 联合中的标量成员是否计入共同的初始序列?