《演算法競賽入門經典第2版》佇列的運用 團體佇列

2021-08-21 12:29:49 字數 1686 閱讀 9198

先給出t個團體,並給出每個團體有多少人和每個人的編號,然後所有團體一起排隊,排成一條大佇列,排隊的原則是,乙個成員加入,如果這個成員所在的團體已經有人在排隊了,那麼他就加到他所在團體的最後面,而不是整個大佇列的最後。如果整個大佇列中沒有他的團體,也就是他是他的那個團體第乙個來的人,那麼他就要排在整個大佇列的最後(當然,他成為了他這個團體的第一人,以後他的隊友來了就可以排他後面)

[輸入]

輸入檔案將包含乙個或多個測試案例。每個測試案例第乙個是團隊t的數量。然後,接下來的t行為團隊每個人的編號,編號是整數,範圍在0 - 999999。乙個團隊可以由多達1000個元素組成。

最後,如下命令指令。有三種不同的指令:

enqueue x - 輸入元素x入隊佇列

dequeue -處理第乙個元素並從佇列中刪除它

stop - 結束

[輸出]

對於每乙個測試案例,首先列印一句"scenario #k」,其中k是測試案例數。然後,為每個佇列的命令,輸出出隊一行元素。每個測試案例後輸出乙個空行(包括最後乙個)

[樣例輸入]

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

#includeusing namespace std;

/*這道題目其實運用了乙個小技巧,

即不直接模擬全隊,

而是選擇運用將乙個大的佇列化解成由各個團體組成的小佇列,

再將佇列的編號放入到原來的大佇列中,

這樣就可以避免將整乙個佇列遍歷一次,操作也會相對簡單,只用了pop和push */

const int maxt=1000+10;

int main()

else if(cmd[0]=='e')

} printf("%d\n");

} return 0;

}

演算法競賽入門經典(第2版)例題(第3章)

例題 3 1 tex中的引號 tex quotes include intmain else printf c c return0 例題 3 2 wertyu include char s 1234567890 qwertyuiop asdfghjkl zxcvbnm,int main 例題 3 3...

演算法競賽入門經典 第2版 習題2 3詳解

畫圖分析 第二個迴圈 列印 for k 1 k 2 n i 1 k printf n 換行 return 0 執行結果 上面寫的是列印倒三角形的 到這裡我覺得還是有必要寫乙個列印正三角形的 列印 for k 1 k 2 i 1 k printf n 換行 return 0 執行結果 綜上所述 其實這...

演算法競賽入門經典(第二版)第2章習題

2.4.1 輸出技巧 include intmain 習題2 2 水仙花數 daffodil 輸出100 999中的所有水仙花數。若3位數abc滿足abc a 3 b 3 c 3,則稱其為水仙花數。include intmain return 0 習題2 3 韓信點兵 hanxin 相傳韓信才智過人...