1. 程式人生 > >例題5-6 團體佇列

例題5-6 團體佇列

#include<cstdio>
#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;	//team[x]表示編號為x的人所在的團隊編號
		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];	//q是團隊的佇列,而q2[i]是團隊i成員的佇列
		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\n",q2[t].front());
				q2[t].pop();
				if(q2[t].empty()) q.pop();	//團體t全體出佇列 
			}
			else if(cmd[0]=='E'){
				scanf("%d",&x);
				int t=team[x];
				if(q2[t].empty())	q.push(t);	//團隊t進入佇列
				q2[t].push(x); 
			}
		} 
		 printf("\n");
		
	}
	
	return 0;
}