您的位置:首页 > 产品设计 > UI/UE

HOJ 1456 Team Queue(用queue进行模拟)

2012-08-24 16:32 357 查看
这题用的是queue,还有用了map实现将不同的人分到若干组。queue里的元素还是queue,这样就能实现插队的功能了,直接在特定的queue后面push即可。这里还用了一个bool型的visit数组,用来记录这一个team中是否有人已经在队列里。如果有,直接在对应的queue后面push一个新member。如果没有,说明这个member是他们team里面第一个来排队的,直接把他push在队尾即可。总之,在排队的不是一个人,而一个team。

#include <iostream>
#include<cstdio>
#include <map>
#include<queue>
#include<memory.h>
using namespace std;

int main()
{
int t,num,member,caseNum=0;
char s[20];
bool visit[1009];

while(scanf("%d",&t) &&t)
{
map<int,int>team;              //把队员的编号101之类的与所在q的编号联起来
queue<int> q[1009],realqueue;  //q是realqueue里面排队的成员
for(int i=0;i<t;i++)
{
scanf("%d",&num);
while(num--)
{
scanf("%d",&member);
team[member]=i;
}
}
memset(visit,0,sizeof(visit));
printf("Scenario #%d\n",++caseNum);
while(scanf("%s",s),*s!='S')
{
if(*s=='E')
{
scanf("%d",&member);
q[team[member]].push(member);
if(visit[team[member]]==false)
{
realqueue.push(team[member]);
visit[team[member]]=true;
}
}
else
{
printf("%d\n",q[realqueue.front()].front());
q[realqueue.front()].pop();
if(q[realqueue.front()].empty())
{
visit[realqueue.front()]=false;
realqueue.pop();
}
}
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: