uva題目鏈接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=481
用了多維佇列team[]儲存各個team中的element,再用一個單獨的佇列儲存team的編號在queue中。一開始一個team出隊後未把在佇列的旗標in_queue[]清0,導致後來queue的的team是空的,但是還要pop(),所以就有RuntimeError錯誤!
。。看到網上很多人都用list來做,我還不會用list。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;
#define range1 1000010
#define range2 1010
int a[range1];
queue<int>team[range2],qnum;
int main()
{
// freopen("in.txt","r",stdin);
int tnum,ncase;
ncase=0;
while(scanf("%d",&tnum)==1 && tnum)
{
ncase++;
memset(a,-1,sizeof(a));
int i,j;
for(i=1;i<=tnum;i++)
{
int n;
scanf("%d",&n);
for(j=0;j<n;j++)
{
int u;
scanf("%d",&u);
a[u]=i;
}
}
int in_queue[range2];
memset(in_queue,0,sizeof(in_queue));
for(i=1;i<=tnum;i++)
while(!team[i].empty()) team[i].pop();
while(!qnum.empty()) qnum.pop();
printf("Scenario #%d\n",ncase);
while(1)
{
char cmd[20];
memset(cmd,'\0',sizeof(cmd));
scanf("%s",cmd);
if(strcmp(cmd,"ENQUEUE")==0)
{
int v;
scanf("%d",&v);
int t=a[v];
if(!in_queue[t])
{
qnum.push(t);
in_queue[t]=1;
team[t].push(v);
}
else
{
team[t].push(v);
}
}
else if(strcmp(cmd,"DEQUEUE")==0)
{
int h=qnum.front();
int h2=team[h].front();
printf("%d\n",h2);
team[h].pop();
if(team[h].empty())
{
qnum.pop();
in_queue[h]=0;//開始這行沒加,出現了Runtime Error
}
}
else
{
printf("\n");
break;
}
}
}
return 0;
}