解题思路
这个题显然是用队列做的,但是单纯的一维队列无法解决这个问题,因为要涉及到插队问题,所以我们要用一个二维的队列来存储完成入队和出队操作,但是这样的话,我们无法得知每个队伍的先后顺序,所以我们还需要再用一个一维队列来存储小队的顺序。
代码
const int maxn = 1e3+10;
const int maxm = 1e6+10;
int id[maxm];
int main() {
int t, kase = 1;
while(~scanf("%d",&t) && t) {
printf("Scenario #%d
",kase++);
queue<int> team, mr[maxn];
int teamid = 0;
while(t--) {
++teamid;
int n; scanf("%d",&n);
for (int i = 0,num; i<n; ++i) {
scanf("%d",&num);
id[num] = teamid;
}
}
char str[10];
while(~scanf("%s",str) && str[0]!='S') {
if (str[0]=='E') {
int num; scanf("%d",&num);
if (mr[id[num]].empty()) {
team.push(id[num]);
mr[id[num]].push(num);
}
else mr[id[num]].push(num);
}
else if (str[0]=='D') {
printf("%d
", mr[team.front()].front());
mr[team.front()].pop();
if (mr[team.front()].empty()) team.pop();
}
}
putchar(endl);
}
return 0;
}