题目地址:点击打开链接
C++代码:
#include <iostream>
#include <map>
#include <utility>
#include <string>
using namespace std;
const int maxsize=1010;
struct LinkNode
{
LinkNode *left,*right;
int data;
};
void del(LinkNode *p)
{
LinkNode *l=p->left;
LinkNode *r=p->right;
l->right=r;
if(r)
r->left=l;
delete p;
}
void ins(LinkNode *p,int x)
{
LinkNode *q=new LinkNode;
q->data=x;
q->left=p;
q->right=p->right;
if(p->right)
p->right->left=q;
p->right=q;
}
int main()
{
int n;
int cas=1;
while(cin>>n&&n!=0)
{
LinkNode *p[maxsize]={NULL};
LinkNode *head=new LinkNode;
head->right=NULL;
LinkNode *last=head;
map<int,int> mii;
int i;
for(i=0;i<n;++i)
{
int k;
cin>>k;
while(k--)
{
int x;
cin>>x;
mii.insert(make_pair(x,i));
}
}
string s;
int x;
cout<<"Scenario #"<<cas++<<endl;
while(cin>>s&&s!="STOP")
{
if(s=="ENQUEUE")
{
cin>>x;
if(p[mii[x]]==NULL||p[mii[x]]==last)
{
ins(last,x);
last=last->right;
p[mii[x]]=last;
}
else
{
ins(p[mii[x]],x);
p[mii[x]]=p[mii[x]]->right;
}
}
else
{
x=head->right->data;
if(p[mii[x]]==head->right)
p[mii[x]]=NULL;
del(head->right);
cout<<x<<endl;
}
}
cout<<endl;
}
return 0;
}