有n個小組要排成乙個佇列,每個小組中有若干人。
當乙個人來到佇列時,如果佇列中已經有了自己小組的成員,他就直接插隊排在自己小組成員的後面,否則就站在隊伍的最後面。
請你編寫乙個程式,模擬這種小組佇列。
輸入格式:
輸入將包含乙個或多個測試用例。
對於每個測試用例,第一行輸入小組數量t。
接下來t行,每行輸入乙個小組描述,第乙個數表示這個小組的人數,接下來的數表示這個小組的人的編號。
編號是0到999999範圍內的整數。
乙個小組最多可包含1000個人。
最後,命令列表如下。 有三種不同的命令:
1、enqueue x - 將編號是x的人插入佇列;
2、dequeue - 讓整個佇列的第乙個人出隊;
3、stop - 測試用例結束
每個命令佔一行。
當輸入用例t=0時,代表停止輸入。
需注意:測試用例最多可包含200000(20萬)個命令,因此小組佇列的實現應該是高效的:
入隊和出隊都需要使用常數時間。
輸出樣例
對於每個測試用例,首先輸出一行「scenario #k」,其中k是測試用例的編號。
然後,對於每個dequeue命令,輸出出隊的人的編號,每個編號佔一行。
在每個測試用例(包括最後乙個測試用例)輸出完成後,輸出乙個空行。
資料範圍
1≤t≤1000
輸入樣例:
23 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
#include
#include
#include
using namespace std;
const
int n=
1010
,m=1000010
;//n為小組數上限,m為人數上限
int teamid[m]
;//teamid將每個人和組數聯絡起來
intmain()
} string command;
while
(cin>>command,command!=
"stop"
)else
} cout<}return0;
}
高階指南 小組佇列
很樸素的想法就是開個陣列,如何瘋狂判斷這組有沒有,有的話插入,沒有在後面插入,顯然複雜度有點高 那如果把其的總隊列與分佇列分開,則上面插入加複雜度的問題就解決咯,就四種情況 如果原來有,則直接在分佇列插入該數 否則,則再在佇列末插入該數所在的佇列 直接得總隊列的第乙個佇列是誰,直接刪分佇列中第乙個數...
《演算法競賽高階指南》 防曬
有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...
《演算法競賽高階指南》蚯蚓
蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有 n 只蚯蚓,第 i 只蚯蚓的長度為 ai 所有蚯蚓的長度都是非負整數,即可能存在長度為0的蚯蚓。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻,將其切成兩段。若有多隻最長的,則任...