本题有两个队列:每个团队有一个队列,而团队整体又形成一个队列,建两个queue即可。
#include<cstdio>
#include<map>
#include<queue>
using namespace std;
const int maxt = 1000 + 5;
int t,n;
char cmd[10];
int main(){
int kase = 0;
while(scanf("%d",&t) && t){
queue<int>q1,q2[maxt];
map<int,int>group;
int member;
for(int i = 0;i < t;i++){
scanf("%d",&n);
while(n--){
scanf("%d",&member);
group[member] = i;
}
}
printf("Scenario #%d\n",++kase);
while(scanf("%s",cmd) && cmd[0] != 'S'){
if(cmd[0] = 'E'){
scanf("%d",&membet);
int t = group[x];
if(q2[t].empty()) q1.push(t);
q2[t].push(x);
}
else{
int t = q1.front();
printf("%d\n",q2[t].front());
q2[t].pop();
if(q2[t].empty()) q1.pop(); //看没人了才pop
}
}
putchar('\n');
}
return 0;
}