重要的解释都在代码下片
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 1010, M = 1000010;
int teamid[M];
int main()
{
int n, C = 1;
while (cin >> n, n)
{
printf("Scenario #%d\n", C ++ );
for (int i = 0; i < n; i ++ )
{
int cnt;
cin >> cnt;
while (cnt -- )
{
int x;
cin >> x;
teamid[x] = i;
}
}
queue<int> team;
queue<int> person[N];
string c;
while (cin >> c, c != "STOP")
{
if (c == "ENQUEUE")
{
int x;
cin >> x;
int tid = teamid[x];//得到它输入哪个编号
if (person[tid].empty())//如果队伍里这个编号里面没有人
team.push(tid);//队伍里加入这个编号
person[tid].push(x);//队伍里这个编号加人
}
else
{
int tid = team.front();//取出队头的人的编号
auto &q = person[tid];
cout << q.front() << endl;//输出队伍里这个编号的第一个人
q.pop();//删除这个队伍里这个编号的第一个人
if (person[tid].empty()) team.pop();//如果这个编号的人,队伍里被删完了,去掉这个编号
}
}
cout << endl;
}
}