题目不难,重点是如何用queue模拟这个过程,灵活运用queue,数据值较大,需要离散化,此处直接用map进行映射。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <deque>
using namespace std;
const int N = 1e3 + 10;
const int mod = 998244353;
//#define int long long
#define endl '\n'
#define sc(n) scanf("%d", &n);
#define Fast ios::sync_with_stdio(false)
int cnt;
map<int, int> mp;
void solve()
{
int n;
while (cin >> n)
{
if(n==0)return;
cout << "Scenario #" << ++cnt << endl;
mp.clear();
queue<int> q[N], t;
for (int i = 1; i <= n; i++)
{
int t;
cin >> t;
while (t--)
{
int x;
cin >> x;
mp[x] = i;
}
}
char op[10];
while (cin >> op)
{
if (op[0] == 'E')
{
int x;
cin >> x;
int ver = mp[x];
if (q[ver].empty())
t.push(ver);
q[ver].push(x);
}
else if (op[0] == 'D')
{
int ver = t.front();
cout << q[ver].front() << endl;
q[ver].pop();
if(q[ver].empty())t.pop();
}
else if (op[0] == 'S')
break;
}
cout<<endl;
}
}
signed main()
{
Fast;
int _;
// sc(_);
_ = 1;
while (_--)
solve();
return 0;
}