题目链接https://vjudge.net/problem/UVA-540
这道题符合先进先出的规则,那么用队列。这道题需要用到两个队列,每个团队形成一个队列q1[1000](最多有1000个团队)这些团队一起又形成一个队列q
这道题让我明白:原来定义队列不仅仅可以是queue<int>q,还可以queue<int>q[1000],定义为数组
代码如下
#include<cstdio>
#include<iostream>
#include<queue>
#include<map>
#include<string>
using namespace std;
int main()
{
int t,kase=0;
while(cin>>t&&t)
{
queue<int>q,q1[1003];
cout<<"Scenario"<<" #"<<++kase<<endl;
map<int,int>team;
//记录每个队列有哪些人
for(int i=0;i<t;i++)
{
int n;
cin>>n;
while(n--)
{
int m;
cin>>m;
team[m]=i;//m人属于i队列
}
}
//模拟命令
string cmd;
while(cin>>cmd&&cmd!="STOP")
{
if(cmd[0]=='E')
{
int person;
cin>>person;
int gteam=team[person];
if(q1[gteam].empty())q.push(gteam);
q1[gteam].push(person);
}
else
{
int gteam=q.front();
int person=q1[gteam].front();
cout<<person<<endl;
q1[gteam].pop();
if(q1[gteam].empty())q.pop();
}
}
printf("\n");
}
return 0;
}