UVA 540(队列)
时间:2014-06-03 04:43:27
收藏:0
阅读:445
题意:让你排一个长队,ENQUEUE -X 就是往队列里加一个元素,如果这个元素跟队列里的某个元素在上边给出的team里是在相同的team,则将这个元素插在这个元素的右边,否则放在总队列的最后 。
用一个队列保存队伍编号,另一些队列保存编号每个队的队员。
#include<stdio.h> #include<algorithm> #include<cctype> #include<queue> #include<string.h> using namespace std; int order[1000001],exist[1000001]; queue<int>team[1001]; queue<int>cnt; int main() { int t,cas=1; //freopen("in.txt","r",stdin); char s[15]; while(~scanf("%d",&t)&&t) { int n=0,num; for(int i=0;i<t;i++) { scanf("%d",&n); for(int j=1;j<=n;j++) { scanf("%d",&num); order[num]=i; } } for(int i=0;i<=t;i++) { while(!team[i].empty())team[i].pop(); } while(!cnt.empty())cnt.pop(); memset(exist,0,sizeof(exist)); printf("Scenario #%d\n",cas++); while(~scanf("%s",s)) { if(strcmp(s,"STOP")==0)break; else if(strcmp("DEQUEUE",s)==0) { int p=cnt.front(); int ans=team[p].front();team[p].pop(); printf("%d\n",ans); if(team[p].empty()) { cnt.pop(); exist[p]=0; } } else { scanf("%d",&num); int &temp=order[num]; team[temp].push(num); if(!exist[temp]) { cnt.push(temp); exist[temp]=1; } } } printf("\n"); } return 0; }
原文:http://blog.csdn.net/u013268685/article/details/27553013
评论(0)