Team Queue UVA - 540

Posted 啦啦啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Team Queue UVA - 540相关的知识,希望对你有一定的参考价值。

 

 

 题意:有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在队伍里,那么这个新人会插队到最后一个队友的身后;否则他就排到长队的末尾。

    ENQUEUX x: 编号为x人进入长队。

    DEQUEUX: 长队的队首出队。

    STOP: 停止模拟。

用两个队列,一个是长队,一个是各个团队的队列。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<string>
 5 #include<cstdio>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 
10 const int maxn=1005;
11 
12 int main()
13 {   int t,T=0;
14     while(scanf("%d",&t)&&t){
15         map<int,int> text;
16         for(int i=0;i<t;i++){
17             int n,m;
18             cin>>n;
19             while(n--){
20                 cin>>m;
21                 text[m]=i;
22             }
23         }
24         printf("Scenario #%d\\n",++T);
25         queue<int> Q;
26         queue<int> q[maxn];
27         
28         while(true){
29             char a[10];
30             scanf("%s",a);
31             if(a[0]==\'S\') break;
32             else{
33                 int n;
34                 if(a[0]==\'E\'){
35                     cin>>n;
36                     if(q[text[n]].size()==0) Q.push(n); 
37                     q[text[n]].push(n);
38                     
39                 }
40                 else{
41                     n=Q.front();
42                     cout<<q[text[n]].front()<<endl;
43                     q[text[n]].pop(); 
44                     if(q[text[n]].empty()) Q.pop();       //The key point!
45                 }
46             }
47         }
48         cout<<endl;
49     }
50     return 0;
51 }

 

以上是关于Team Queue UVA - 540的主要内容,如果未能解决你的问题,请参考以下文章

UVA540 Team Queue——题解 by hyl天梦

UVA 540 Team Queue

UVA 540 Team Queue

Team Queue UVA - 540

例题5-6 团体队列 Team Queue UVA - 540

UVA540 TeamQueuemap+queue