queue uva540

队列queue,STL提供的数据结构,队列栈可以理解为方便对字符串的操作,string map用于保存

先进先出

题意:有t个团队的人正在排一个长队,每次来一个人时,如果他有队友在排队,那么这新人会插到最后一个队友的身后,如果没有一个队友在排队,那么他会排到队尾,输入每个团队所有队员的编号,要求支持如下三种指令:

E,编号为x的人进入长队

D,长队的队首出队

S,停止模拟


本题有两个队列,每个团队为一个队列,记录队员的先进先出后的位置。而团队整体又形成一个队列,记录各个团队在长队中的位置。

这个进出方式简直就是为了queue量身打造的

也没有运行

//

//  main.cpp

//  queue uva540

//

//  Created by Mr.Xue on 18/1/26.

//  Copyright © 2018 Mr.Xue. All rights reserved.

//


#include <iostream>

#include <queue>

#include <map>


using namespace std;

const int maxt=1000+10;

int main()

{

    int t,kase=0;

    while(scanf("%d",&t)==1&&t)

    {

        printf("Scenario #%d\n",++kase);

        map<int,int>team;

        for(int i=0;i<t;i++)

        {

            int n,x;

            scanf("%d",&n);

            while(n--)

            {

                scanf("%d",&x);

                team[x]=i;

            }

        }

        queue<int> q,q2[maxt];

        for(;;)

        {

            int x;

            char cmd[10];

            scanf("%s",cmd);

            if(cmd[0]=='S')

                break;

            else if(cmd[0]=='D')

            {

                int t=q.front();

                printf("%d",q2[t].front());

                q2[t].pop();

                if(q2[t].empty())

                    q.pop();

            }

            else if(cmd[0]=='E')

            {

                scanf("%d",&x);

                t=team[x];

                if(q2[t].empty())

                    q.push(t);

                q2[t].push(x);

                

            }

        }

        printf("\n");

    }

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值