有n個小組要排成乙個佇列,每個小組中有若干人。
當乙個人來到佇列時,如果佇列中已經有了自己小組的成員,他就直接插隊排在自己小組成員的後面,否則就站在隊伍的最後面。
請你編寫乙個程式,模擬這種小組佇列。
輸入將包含乙個或多個測試用例。
對於每個測試用例,第一行輸入小組數量t。
接下來t行,每行輸入乙個小組描述,第乙個數表示這個小組的人數,接下來的數表示這個小組的人的編號。
編號是0到999999範圍內的整數。
乙個小組最多可包含1000個人。
最後,命令列表如下。 有三種不同的命令:
1、enqueue x - 將編號是x的人插入佇列;
2、dequeue - 讓整個佇列的第乙個人出隊;
3、stop - 測試用例結束
每個命令佔一行。
當輸入用例t=0時,代表停止輸入。
需注意:測試用例最多可包含200000(20萬)個命令,因此小組佇列的實現應該是高效的:
入隊和出隊都需要使用常數時間。
對於每個測試用例,首先輸出一行「scenario #k」,其中k是測試用例的編號。
然後,對於每個dequeue命令,輸出出隊的人的編號,每個編號佔一行。
在每個測試用例(包括最後乙個測試用例)輸出完成後,輸出乙個空行。
1≤t≤10001≤t≤1000
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
25 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
輸出樣例:
scenario #1
101102
103201
202203
scenario #2
259001
259002
259003
259004
259005
260001
用乙個陣列來記錄每個隊員屬於哪乙個,用乙個二維佇列來儲存每乙個隊員,用乙個以為佇列來jilu當前最前面的隊伍是哪乙個。
#include#include#include#include#include#include#include#include#include#includeconst int inf = 0x3f3f3f3f;
using namespace std;
typedef long long ll;
typedef double ld;
int i,j,l;
int n,m,k,x;
int cnt;
int now;
int t;
int team[1000010];
int main()
}queueq,q2[21000];
for(;;)
else if(op[0]=='d')
}cout<}
return 0;
}
UVA540 團體佇列
有t個團隊的人正在排乙個長隊。每次新來乙個人時,如果他有隊友在排隊,那麼新人會插隊到最後乙個隊友的身後。如果沒有任何乙個隊友排隊,則他會被排到長隊的隊尾。輸入每個團隊中所有隊員的編號,要求支援如下3中指令 enqueue x 編號為x的人進入長隊 dequeue 長隊的隊首出隊 stop 停止模擬 ...
UVA 540 小團體佇列
這道題很有意思,一開始又想複雜了 include include include include include include include include include include include include include include include include inclu...
18 團體佇列(UVa540)
問題 有t個團隊的人正在排乙個長隊。每次新來乙個人時,如果他有隊友在排隊,那麼這個新人會插隊到最後乙個隊友的身後。如果沒有任何乙個隊友排隊,則他會排到長隊的隊尾。輸入每個團隊中所有隊員的編號,要求支援如下3種指令 前兩種指令可以穿插進行 enqueue x 編號為x的人進入長隊 dequeue 長隊...