概述
题目链接
题意
t个团队的人正在排队。
每次新来一个人,如果他有队友在排队,那么这个人会插入到最后一个队友的后面;
如果没有队友在排队,那么他会插入到长队的队尾
解决
- 团体队列问题
- 用一个队列all来表示t个队伍组成的队列,元素是队伍编号
- 建立t个队伍内部的队列team[maxn],用来表示团队内部的队列
- 注意当这个人入队时如果他的队伍不在all队列中,要把这个队伍入队(all队列中)
- 注意当一个人离开队伍后这个队伍为空,那么要把这个队伍出队(all队列中)
#include<bits/stdc++.h>
using namespace std;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
const int maxn = 1005;
int main()
{
int t,cases=1;
while(scanf("%d",&t)&&t>0)
{
printf("Scenario #%dn",cases++);
map<int,int>mymap; //用于保存每个人所属的队伍编号
int n,x;
rep(i,0,t){
scanf("%d",&n);
rep(j,0,n){
scanf("%d",&x);
mymap[x]=i;
}
}
char str[10];
queue<int>all,team[maxn]; //all是团队的队列,team是每个团队内部的队列
while(1) //就像all是景点里面所有旅游团组成的队列,team[i]是旅游团内部的队列
{
//getchar();
scanf("%s",str);
if(str[0]=='S') break;
if(str[0]=='E')
{
scanf("%d",&x);
int t=mymap[x]; //获得所属于的团队
if(team[t].empty()) all.push(t); //如果刚开始这个团队是空的,这个团队需要加入all队列
team[t].push(x);
continue;
}
if(str[0]=='D')
{
scanf("%d",&x);
int t=all.front(); //获取all队列里第一个团队编号
printf("%dn",team[t].front());
team[t].pop();
if(team[t].empty()) all.pop(); //如果这个团队为空,在all队列里面踢出去
}
}
puts("");
}
return 0;
}
最后
以上就是高高路灯为你收集整理的UVA 540 Team Queue(团体队列)题目链接的全部内容,希望文章能够帮你解决UVA 540 Team Queue(团体队列)题目链接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复