題目描述
組隊列是隊列結構中一種常見的隊列結構,在很多地方有着廣泛應用。組隊列是是指隊列內的元素分組聚集在一起。組隊列包含兩種命令:
1、 ENQUEUE,表示當有新的元素進入隊列,首先會檢索是否有同一組的元素已經存在,如果有,則新元素排在同組的最后,如果沒有則插入隊列末尾。
2、 DEQUEUE,表示隊列頭元素出隊
3、 STOP,停止操作
建議使用C++自帶的隊列對象queue,編程更方便
輸入
第1行輸入一個t(t<=10),表示1個隊列中有多少個組
第2行輸入一個第1組的元素個數和數值
第3行輸入一個第2組的元素個數和數值
以此類推輸入完t組以定義同組元素之后,開始輸入多個操作命令(<200),對空的組隊列進行操作,例如輸入ENQUEUE 100,表示把元素100插入隊列
輸出
DEQUEUE出隊的元素
樣例輸入
2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE STOP
樣例輸出
101 102 103
提示
#include<iostream> #include<queue> #include<map> using namespace std; int main() { int T; cin>>T; int value; map<int,int>mem;///map提供key--value映射,此處每個key(101、102、103)的value都是1,(201、202、203)的value都是2 int flag=1; int number; queue<int>que[T]; queue<int>output; for(int i=0;i<T;i++) { cin>>number; while(number--) { cin>>value; mem[value]=i; } } string oper; while(cin>>oper&&oper!="STOP") { if(oper=="ENQUEUE") { cin>>value; for(int i=0;i<T;i++) { if(que[i].empty()||mem[que[i].front()]==mem[value])///如果隊列空或該key所對應的value值與某個隊列隊首相同則入該隊 { que[i].push(value); break; } } } else if(oper=="DEQUEUE") { for(int i=0;i<T;i++) { if(!que[i].empty()) { output.push(que[i].front()); que[i].pop(); break; } } } }///存起來用output隊列輸出 while(!output.empty()) { if(flag==1) { flag=0; cout<<output.front(); } else cout<<" "<<output.front(); output.pop(); } cout<<endl; return 0; }