AcWing 132. 小组队列
原题链接
简单
作者:
路人乙_1
,
2024-12-19 22:14:13
,
所有人可见
,
阅读 1
//题意分析
/*先对每个元素设置小组编号
建立两个队列,一个组内队列,一个组间队列
~入队
//1.查找有同队的,有放在同队的最后
//2.查找没有同队的,新建一个组间队列
~出队
//删除元素后,该组还有元素
//删除元素后,整个组间队列为空,则整个组都将pop */
#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=1000009;
int team[M];
int main()
{
int ceshi,k=1;
while(cin>>ceshi,ceshi)
{
cout<<"Scenario #"<<k++<<"\n";
for(int i=0;i<ceshi;i++)
{
int m;//每组有几个人
cin>>m;
for(int j=1;j<=m;j++)
{
int x;
cin>>x;
team[x]=i;//x属于i号小组
}
}
//组内队列
queue<int> q1[N];
//组间队列
queue<int> q2;
string s;
while(cin>>s,s!="STOP")
{
if(s=="ENQUEUE")
{
int y;
cin>>y;
//组号
int id=team[y];
//如果这个组为空,先建立一个组
if(q1[id].empty()) q2.push(id);
//再把这个值放入组中
q1[id].push(y);
}
else
{
//队头元素属于哪个队列
int id=q2.front();
//删除
cout<<q1[id].front()<<endl;
q1[id].pop();
//
if(q1[id].empty()) q2.pop();
}
}
puts(" ");
}
return 0;
}