Team Queue(POJ 2259)

题意:

给定若干组数据,再给若干命令,模拟队列进出过程。要求,若进队列时,已有该组数据的其他数据,则放在该组最后进队列元素后面。

思路:

这题主要解决入队问题,如果只用一个队列表示team queue模拟的话,则在入队时会花费很多时间。因此用多个team个队列来表示team queue,再用一个

队列来保存team前后队列id信息。然后加上一个flg来判断team是否有element在team queue中。

 1 #include <iostream>
 2 #include <string>
 3 #include <queue>
 4 #include <map>
 5 
 6 using namespace std;
 7 
 8 int nCaseNum,nNum;
 9 
10 quene<long> nQue[1001];  //存储每个队列
11 quene<int> nS;//存储队列号
12 int nM[1000000]; //元素与队列号的映射表
13 bool nFlag[1001]; //标识有无同组元素
14 
15 
16 int main()
17 {
18  
19  nCaseNum=0;
20  
21  while(cin>>nNum,nNum)
22  {
23     init();
24     input();
25     solve();
26  }
27  return 0;
28 }
29 
30 void init()  //importent
31 {
32     for(int i=0;i!=nNum;i++)
33     {
34         nFlag[i]=false;
35         while(!nQue[i].empty())
36                 nQue[i].pop();
37     
38     }
39     while(!nS.empty())
40         nS.pop();
41     
42 }
43 
44 void input()
45 {
46     int nElem,eleNum;
47     
48     for(int i=0;i!=nNum;i++)
49     {
50         cin>>elemNum;
51         for(int j=0;j!=elemNum;++j)
52         {
53             cin>>nElem;
54             nM[nElem]=i;
55         }
56     }
57 }
58 
59 void solve()
60 {
61     string nCommand;
62     long nElem;
63     cout<<"Scenario #"<<++nCaseNum<<endl;
64     
65     while(cin>>nCommand,nCommand!="STOP")
66     {
67         
68         if(nCommand=="ENQUEUE")
69         {
70                 cin>>nElem;
71                 if(!nFlag[nM[nElem])  //若还没有同组元素
72                 {
73                   nFlag[nM[nElem]]=true;
74                   nS.push(nM[nElem]);  //组号入队列
75                 }
76                  nQue[nM[nElem]].push(nElem);
77         }
78         else if(nCommand=="DEQUEUE")
79         {
80             int nId=nS.front();  //首先处理最先进队列的那组元素
81             cout<<nQue[nID].front()<<endl; 
82             nQue[nId].pop();
83             
84             if(nQue[nId].empty())
85             {
86                 nS.pop();
87                 nFlag[nId]=false;
88             }
89         }
90        
91     }
92     cout<<endl;
93 }
原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4711073.html