《演算法競賽高階指南》小組佇列

2021-10-07 11:37:19 字數 1898 閱讀 6872

有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的蚯蚓。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻,將其切成兩段。若有多隻最長的,則任...