AcWing 132. 小组队列
原题链接
简单
作者:
menitrust
,
2022-02-15 18:46:41
,
所有人可见
,
阅读 133
C++ 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=1e6+10,INF=1e8;
queue<int> q[1010],p;//1000个小组,p用来存每个小组的编号
int man[N],cnt;//man记录每个人的小组
char op[10];
int main()
{
int n,cnt=0;
while(~scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
int t;
scanf("%d",&t);
for(int j=1;j<=t;j++)
{
int x;
scanf("%d",&x);
man[x]=i;
}
}
printf("Scenario #%d\n",++cnt);
while(1)
{
scanf("%s",&op);
if(op[0]=='S') break;
else if(op[0]=='E')
{
int x;
scanf("%d",&x);
if(q[man[x]].size()==0)//如果该队列无人,那p要插入q[man[x]]
{
p.push(man[x]);
}
q[man[x]].push(x);
}
else if(op[0]=='D')
{
int x=p.front();
printf("%d\n",q[x].front());
q[x].pop();
if(q[x].size()==0) p.pop();//如果该队列无人,p也要弹出
}
}
printf("\n");
for(int i=1;i<=1010;i++)//记得初始化
while(!q[i].empty()) q[i].pop();
while(!p.empty()) p.pop();
}
return 0;
}