UVa540

时间:2021-12-11 15:11:26
//先输入队伍的个数
//用map建立数组将队伍序号和个人序号相互对应
//三条命令 #include <bits/stdc++.h>
using namespace std;
const int maxn=; int main()
{
int t,kase=;
while(cin>>t && t)
{
cout<<"Scenario "<<"#"<<++kase<<endl; map <int,int> team;
for(int i=;i<=t;i++)
{
int n,x;
cin>>n;//队伍中人的个数
while(n--)
{
cin>>x;
team[x]=i;//队员x在i(t)的队伍中
}
} queue<int> q,q2[maxn];
for(;;)
{
int x;
string cmd;
cin>>cmd;
if(cmd[]=='S')//STOP命令,停止模拟
break;
else if(cmd[]=='D')
{
int t=q.front();//第一个队伍的编号
cout<<q2[t].front()<<endl;
q2[t].pop();//输出并离队
if(q2[t].empty())
q.pop();//t队中的队员全部出队,移除队伍
}
else if(cmd[]=='E')
{
cin>>x;
int t=team[x];//队伍编号
if(q2[t].empty())
q.push(t);
q2[t].push(x);
}
}
cout<<endl;
}
return ;
}

代码基本直接搬的紫书,初次接触了map和queue,简单写一下map和queue的使用笔记

queue的头文件是<queue>

基本操作有:

back()返回最后一个元素

empty()队列为空返回真

front()返回第一个元素

pop()删除第一个元素

push()在末尾加入一个元素

size()返回队列中的元素个数

此题定义了两个队列,第一个用来记录队伍,第二个用来记录对位内的成员

map当成了数组来用,头文件<map>

map的输出跟set挺像的

cout<<iter->first<<" "<<iter->second<<endl;

iter->first 输出的第一个

iter->second 输出的第二个

相关文章