小组队列

# 题意
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 }

 

posted @ 2020-03-15 02:44  Hyx'  阅读(149)  评论(0编辑  收藏  举报