UVa540 Team Queue


// 题意:有t个团队的人在排队。每次来了一个新人之后,如果他有队友在排队,那么这个新人会插队到队友的身后。
// 要求支持三种指令:ENQUEUE x; DEQUEUE(队首出队); STOP。模拟这个过程,输出出队顺序

#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;

const int maxt = 1000 + 10;

int main()
{
    int t;
    int count=0;
    while(cin>>t && t)
    {
        count++;
        cout<<"Scenario #"<<count<<endl;

        map<int, int> team;
        for(int i=0;i<t;i++)
        {
            int tsize;
            cin>>tsize;
            for(int j=0;j<tsize;j++)
            {
                int element;
                cin>>element;
                team[element]=i;
            }
        }

        queue<int> q,  q2[maxt];
        string cmd;
        while(cin>>cmd && cmd!="STOP")
        {
            if(cmd=="ENQUEUE")
            {
                int element;
                cin>>element;
                int t=team[element];
                if(q2[t].empty())
                    q.push(t);

                q2[t].push(element);
            }
            else//DEQUEUE
            {
                int t=q.front();
                cout<<q2[t].front()<<endl; q2[t].pop();
                if(q2[t].empty())
                    q.pop();
            }
        }
        cout<<endl;
    }

    return 0;
}
原文地址:https://www.cnblogs.com/cute/p/3622396.html