题解
开两个队列 , 一个是队编号的队列 , 另一个是每队成员的队列
读入数据的同时标记 此人的团队号
每次模拟入队出队即可 , 需要注意的是 每次**团队成员**入队出队的时候还需要考虑
**团队成员的团队号** 是否为空
代码
#include <bits/stdc++.h>
using namespace std ;
#define rg register
typedef long long ll ;
int main ( ) { freopen( "F:\\in\\quque.txt" , "r" , stdin ) ;
int T , t , pep ;
string s ;
map<int,int> team ;
rg int cas = 0 ;
while ( cin >> T &&T!=0) {
team.clear() ;
cout << "Scenario #" << ++cas << endl ;
for ( rg int i = 0 ; i < T ; ++i ) {
cin >> pep ;
while ( pep-- ) {
cin >> t ;
team[t] = i ; // 标记每个人的 团体号
}
}
queue<int> qt ; // 团体
queue<int> q[1000+10] ; // 团员
while ( cin >> s &&s != "STOP") {
if ( s == "ENQUEUE" ) {
cin >> t ;
rg int tm = team[t] ; // 此人的团队号
q[tm].push( t ) ;
if ( q[tm].empty() )
qt.push( tm ) ;
}
else if ( s == "DEQUEUE" ) {
rg int tm = qt.front() ;
cout << q[tm].front() << endl ;
q[tm].pop() ;
if ( q[tm].empty() )
qt.pop() ;
}
}
cout << endl ;
}
return 0 ;
}
题目
样例输入
2
3 101 102 103
3 201 202 203
ENQUEUE 101
ENQUEUE 201
ENQUEUE 102
ENQUEUE 202
ENQUEUE 103
ENQUEUE 203
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
2
5 259001 259002 259003 259004 259005
6 260001 260002 260003 260004 260005 260006
ENQUEUE 259001
ENQUEUE 260001
ENQUEUE 259002
ENQUEUE 259003
ENQUEUE 259004
ENQUEUE 259005
DEQUEUE
DEQUEUE
ENQUEUE 260002
ENQUEUE 260003
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
0
样例输出
Scenario #1
101
102
103
201
202
203
Scenario #2
259001
259002
259003
259004
259005
260001