//提交未成功
#include <iostream>
#include <string>
#include <cstdio>
#include <sstream>
using namespace std;
const int nMax=1005;
struct Queue{
int q[nMax];
int front,rear;
Queue():front(0),rear(0){}
}queue[nMax];
struct Team{
int t[nMax];
int n;//n表示元素个数
Team():n(0){}
}team[nMax];
int t,n;
int getTeam(int x)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<team[i].n;j++)
if(team[i].t[j]==x)
return i;
}
return -1;
}
void EnQueue(int u,int a)
{
queue[u].q[queue[u].front++]=a;
}
int DeQueue()
{
for(int i=0;i<n;i++)
{
for(int j=queue[i].rear;j<queue[i].front;j++)
{
return queue[i].q[queue[i].rear++];
}
}
return -1;
}
int main()
{
/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
//*/
int cas=0;
while(scanf("%d",&t) && t!=0)
{
cas++;
printf("Scenario #%d\n",cas);
for(int i=0;i<t;i++)
{
scanf("%d",&n);
team[i].n=n;
for(int j=0;j<n;j++)
scanf("%d",&team[i].t[j]);
}
string command;
while(getline(cin,command) && command!="STOP")
{
istringstream in(command);
string oper;
in>>oper;
if(oper=="ENQUEUE")
{
int a;
in>>a;
int u;
u=getTeam(a);
EnQueue(u,a);
}
else if(oper=="DEQUEUE")
{
int a=DeQueue();
if(a!=-1)
printf("%d\n",a);
}
}
printf("\n");
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <string>
#include <list>
using namespace std;
list<int> l;
int elem[1000000];//暴力求解--思想
list<int>::iterator team[1005];
int t,n;
int main()
{
//freopen("data.in","r",stdin);
int cas=0;
while(scanf("%d",&t) && t)
{
printf("Scenario #%d\n",++cas);
l.clear();
for(int i=1;i<=t;i++)
{
team[i]=l.end();
int n;
scanf("%d",&n);
for(int j=0;j<n;j++)
{
int a;
scanf("%d",&a);
elem[a]=i;
}
}
string oper;
while(cin>>oper && oper!="STOP")
{
if(oper=="ENQUEUE")
{
int b;
scanf("%d",&b);
if(team[elem[b]]!=l.end())
{
++team[elem[b]];
team[elem[b]]=l.insert(team[elem[b]],b);
}
else
team[elem[b]]=l.insert(team[elem[b]],b);
}
else if(oper=="DEQUEUE")
{
int temp;
temp=l.front();
if(team[elem[temp]]==l.begin())//漏写
team[elem[temp]]=l.end();
printf("%d\n",temp);
l.pop_front();
}
}
printf("\n");
}
return 0;
}
第二次做:未通过
#include <cstdio>
#include <cstring>
const int nMax=1000+10;
struct Queue
{
int q[nMax];
int front,rear;
}queue[nMax];
int team[1000000];//哈希表处理查找问题,会方便很多
int t;
void dequeue()
{
for(int i=0;i<t;i++)
if(queue[i].front!=queue[i].rear)
{
printf("%d\n",queue[i].q[queue[i].rear++]);
return;
}
}
int main()
{
//freopen("f://data.in","r",stdin);
int n=0;
while(scanf("%d",&t) && t)
{
printf("Scenario #%d\n",++n);
memset(team,0,sizeof(team));
memset(queue,0,sizeof(queue));
for(int ans=0;ans<t;ans++)
{
int k;
scanf("%d",&k);
while(k--)
{
int num;
scanf("%d",&num);
team[num]=ans;
}
}
char opr[10];
while(scanf("%s",opr))
{
if(strcmp(opr,"STOP")==0)
break;
else if(strcmp(opr,"ENQUEUE")==0)
{
int a;
scanf("%d",&a);
int pos=team[a];
queue[pos].q[queue[pos].front++]=a;
}
else if(strcmp(opr,"DEQUEUE")==0)
{
dequeue();
}
}
printf("\n");
}
return 0;
}