队列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;
}