#include<iostream> #include<cstdio> #include<queue> #include<map> using namespace std; const int maxt=10000; int main() { int t,kase=0; while(scanf("%d",&t)==1&&t) { printf("Scenario #%d\n",++kase); map<int , int >team; //记录编号 for(int i=0;i<t;i++)//i代表队数 { int n,x;//n是队员数 x是队员号码 scanf("%d",&n); while(n--) { scanf("%d",&x); team[x]=i; } } //模拟 queue <int> q,q2[maxt]; 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(); } } else if(cmd[0]=='E') { scanf("%d",&x); int t=team[x]; if(q2[t].empty()) q.push(t); q2[t].push(x); } } printf("\n"); } return 0; } 分成两种队列,一个是总的队列,一个是每一组的队列。然后通过q2[t].empty来判断团队队列是否走光,和q.front来判断队首团队。可以有队列数组。各个数字对应的意义。