Poj2259(團體佇列)

2021-09-25 08:31:23 字數 1871 閱讀 6520

題目大意

有t個團隊的人排隊,每有乙個新來的人時,如果他有隊友正在排隊,那麼他就會站在他隊友的後面。如果沒有隊友,就站在隊伍的最後面。

輸入每個團隊中所有隊員的編號,要求支援如下3中指令:

enqueue x:編號為x的人進入長隊;

dequeue:長隊的隊首出隊;

stop:停止模擬。

對於每個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

dequeue

dequeue

dequeue

stop

最開始隊伍是空的,然後,一號團的101號大媽來了。

(此時,隊伍順序為:101.)

接著二號團201大爺也跟了過來。

(此時,隊伍順序為:101,201.)

接著,一號團的102號大媽也來了,不把二號團的大爺放眼裡,站在了201號大爺前面。

(此時,隊伍順序為:101,102,201.)

二號團202號大爺見狀,不好吭聲,只好緊接在201號大爺之後。

(此時,隊伍順序為:101,102,201,202)

一號團又來一103號大姐,不把二團放眼裡般站在了一團之後。

(此時,隊伍順序為:101,102,103,201,202)

二團最後203號大爺不急不慢走到了隊尾。

(此時,隊伍順序為:101,102,103,201,202,203)

從樣例和生活常識綜合分析可得:無論後面來的人是誰,都可以插入到自己的團隊內排在後面。

所以可以簡單找到做題突破口:將每個團體當成乙個個體進行排隊,然後再隊每個團隊內部進行一次排隊。

那麼!用什麼方法呢?

answer:都說了是排隊了,那*** 肯定是用佇列了啊!

佇列是啥?

那麼佇列怎麼寫呢?

answer:用stl啊!

因為題目給了每個人的編號是<=999999的,所以,我用了類似桶排的方法記錄了每個人所在隊伍。

即:

int a[10000000];

for(int i = 0;i < n;++ i)

}

然後剩下的就只用對操作進行簡單的模擬就好了!

下面附上完整**!

#include #include #include #include #include #include using namespace std;

int n;

queueq;

queueq[1006];

char ch[30];

int a[10000000];

int x;

int f;

int k = 1;

int main(void){

while(scanf("%d",&n)){

if(n == 0)//結束標誌,跳出迴圈

break;

cout << "scenario #" << k碼風較醜,請勿嘲笑。

Team Queue UVA 540 團體佇列

題目鏈結 有t個團隊的人正在排乙個長隊。每次新來乙個人時,如果他有隊友在排隊,那麼這個新人會插隊到最後乙個隊友的身後。如果沒有任何乙個隊友排隊,則他會排到長隊的隊尾。輸入每個團隊中所有隊員的編號,要求支援如下3種指令 前兩種指令可以穿插進行 對於每個dequeue指令,輸出出隊的人的編號。分析 本題...

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...