題目大意
有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...