题目详情
解题思路:
按照题意来说本题应设有两个队列:每个团体有一个队列,而团体整体又形成一个队列。例如,有3个团队1,2,3,队员集合分别为{101,102,103,104}、{201,202}和{301,302,303},当前长队为{301,303,103,101,102,201},则3个团队的队列分别为{103,101,102}、{201}和{301,303},团队整体的队列为{3,1,2}.
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<string>
using namespace std;
const int maxt=1010;
int main()
{
int T;
int R=0;
while(cin>>T&&T!=0)
{
cout<<"Scenario #"<<++R<<endl;
map<int,int>team;
for(int i=0;i<T;i++)
{
int t;
cin>>t;
while(t--)
{
int l;
cin>>l;
team[l]=i;
}
}
queue<int>ID,ID2[maxt]; //创建总的团体队列,以及每个团体的队列。
while(true)
{
string s;
cin>>s;
int k;
if(s[0]=='S') break;
else if(s[0]=='E')
{
cin>>k;
int x=team[k];
if(ID2[x].empty())
ID.push(x);
ID2[x].push(k);
}
else if(s[0]=='D')
{
int f=ID.front();
cout<<ID2[f].front()<<endl;
ID2[f].pop();
if(ID2[f].empty()) ID.pop();
}
}
cout<<endl;
}
return 0;
}