小组队列
# 题意
n个小组要排队,每个小组中有若干人。
当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面。模拟。
# 题解
一个队列储存所有小组,
n个队列储存所有小组的队员
每次一个人入队如果小组队列中已经存在,就在当前小组后面,
如果还没有就在储存小组编号的队列后面插入当前小组
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 const int N=1010; 5 char op[10]; 6 int c[1000010],cnt=1; 7 int x; 8 int n; 9 int main(){ 10 while(cin>>n&&n){ 11 queue<int>code,p[N]; 12 for (int i = 1; i <=n ; ++i) { 13 int k; 14 scanf("%d",&k); 15 for (int j = 1; j <=k ; ++j) { 16 scanf("%d",&x); 17 c[x]=i; 18 } 19 } 20 printf("Scenario #%d\n",cnt++); 21 while(~scanf("%s",op)&&op[0]!='S'){ 22 if(op[0]=='E'){ 23 scanf("%d",&x); 24 if(!p[c[x]].size()) 25 code.push(c[x]); 26 p[c[x]].push(x); 27 } 28 else{ 29 x=code.front(); 30 printf("%d\n",p[x].front()); 31 p[x].pop(); 32 if(!p[x].size()) 33 code.pop(); 34 } 35 } 36 puts(""); 37 } 38 return 0; 39 }