UVA 540 Team Queue

这题就是一个特殊的队列, 我用了vector来模拟。
题意是 有几个队伍,每个队伍中有编号为0—999999的队员。
他们根据命令行来构成队列,
ENQUEUE x 将编号为x的队员入队,若是队列中有x所属队伍的队员,则排在这些队员的最后面。
DEQUEUE 出队,将队列中排第一位的出列并输出其对应编号。
用vector模拟 不多说了。。


#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int MAXN=1000005;
int a[MAXN];
vector<int> q;
int main()
{
    int n, m, i, e, k=0;
    char cmd[25];
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        printf("Scenario #%d\n",++k);
        for(i=0;i<n;i++)
        {
            scanf("%d",&m);
            while(m--)
            {
                scanf("%d",&e);
                a[e]=i;
            }
        }
        bool flag;
        while(scanf("%s",cmd))
        {
            if(cmd[0]=='S') break;
            flag=false;
            if(cmd[0]=='E')
            {
                scanf("%d",&e);
                for(i=q.size()-1;i>=0;i--)
                {
                    int t=q[i];
                    if(a[t]==a[e])
                    {
                        q.insert(q.begin()+i+1,e);
                        flag=true;
                        break;
                    }
                }
                if(!flag) q.insert(q.end(),e);
            }
            else if(cmd[0]=='D')
            {
                printf("%d\n",q[0]);
                q.erase(q.begin());
            }
        }
        puts("");
        q.clear();
    }
    return 0;
}



posted @ 2013-05-04 19:15  Ink_syk  阅读(93)  评论(0编辑  收藏  举报