AcWing 132. 小组队列
原题链接
简单
作者:
帅
,
2020-09-04 16:13:33
,
所有人可见
,
阅读 678
C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1010;
const int maxm = 1e6+6;
int tame[maxm];
int main()
{
int ci = 1;
int t;
while(cin >> t, t) //有t组输入
{
cout << "Scenario #" << ci << endl;
ci ++;
for(int i = 0; i < t; i ++) //对于每组输入
{
int cnt;
cin >> cnt; //每组有多少个数字
while(cnt --) //输入每个数字
{
int x;
cin >> x;
tame[x] = i; //给每组的数字分组;
}
}
queue<int> tem; //队列表示每个小队的排序
queue<int> te[maxn]; //队列表示每个小队内部的排序
string s;
while(cin >> s && s != "STOP")
{
if(s == "ENQUEUE")
{
int x;
cin >> x;
if(te[tame[x]].empty()) //如果这个小队是空的
{
tem.push(tame[x]); //那么我们在大队里创建小队
te[tame[x]].push(x); //然后将元素放入小队中
}
else
{
te[tame[x]].push(x); //否者 我们直接放入小队中就可以
}
}
else
{
int tid = tem.front(); //将大队第一个元素拿出来
auto &q = te[tid]; //用q表示这个小队
cout << q.front() << endl; //输出小队第一个数字
q.pop(); //然后pop删除第一个
if(q.empty()) tem.pop(); //当当前小队为空, 我们在大队里里删除小队的存在
}
}
cout << endl;
}
return 0;
}