c++ queue

/*
queue 的基本操做有:
入隊,如例:q.push(x); 將x 接到隊列的末端。
出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最先被壓入隊列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
判斷隊列空,如例:q.empty(),當隊列空時,返回true。
訪問隊列中的元素個數,如例:q.size()


問題:有t個團隊的人正在排一個長隊.每次新來一我的時,若是他有隊友在排隊,那麼這個新人會插隊到最後一個隊友的身後.若是沒有任何一個隊友排隊,則他
    會排到長隊的隊尾.輸入每一個團隊中全部隊員的編號,要求支持以下3種指令
    ENQUEUE:x編號爲x的人進入長隊
    DEQUEUE:長隊的隊首出隊
    STOP:中止模擬

解題思路: 能夠理解成一個隊列中有許多小的隊列組成
樣例:
Sample Input

2
3 101 102 103
3 201 202 203
ENQUEUE 101
ENQUEUE 201
ENQUEUE 102
ENQUEUE 202
ENQUEUE 103
ENQUEUE 203
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
2
5 259001 259002 259003 259004 259005
6 260001 260002 260003 260004 260005 260006
ENQUEUE 259001
ENQUEUE 260001
ENQUEUE 259002
ENQUEUE 259003
ENQUEUE 259004
ENQUEUE 259005
DEQUEUE
DEQUEUE
ENQUEUE 260002
ENQUEUE 260003
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
0

Sample Output

Scenario #1
101
102
103
201
202
203

Scenario #2
259001
259002
259003
259004
259005
260001
*/
#include<cstdio>
#include<queue>
#include<map>
using namespace std;
const int maxt=1010;
int main(){
    int t,kase=0;
    while(scanf("%d",&t)==1&&t){
        printf("Scenario #%d\n",++kase);
        //記錄全部認的團隊編號
        map<int,int> team;//team[x] 表示編號爲x的人所在的團隊編號
        for(int i=0;i<t;i++){
            int n,x;
            scanf("%d",&n);
            while(n--){
                scanf("%d",&x);//每一個小隊列的元素
                team[x]=i;
            }
        }
        queue<int>q,q2[maxt];//q是團隊的隊列(長隊),而q2[i]是團隊i成員的隊列
        for(;;){
            int x;
            char cmd[10];
            scanf("%s",cmd);
            if(cmd[0]=='S')break;
            else if(cmd[0]=='D'){
                int t=q.front();//找到長隊的隊首(就是小隊列的總體組成的一個元素)
                printf("%d\n",q2[t].front());
                q2[t].pop();//彈出大隊列中小隊列的隊首
                if(q2[t].empty())q.pop();
            }
            else if(cmd[0]=='E'){
                scanf("%d",&x);//輸入x
                int t=team[x];//找到x所在團隊編號
                if(q2[t].empty())q.push(t);//團隊t進入隊列
                q2[t].push(x);
            }
        }
        printf("\n");
    }
    return 0;
}

spa

相關文章
相關標籤/搜索