華為OD機試-模擬消息隊列
讓我們來模擬一個消息隊列的運作,有一個發(fā)布者和若干消費者,發(fā)布者會在給定的時刻向消息隊列發(fā)送消息若此時消息隊列有消費者訂閱,這個消息會被發(fā)送到訂閱的消費者中優(yōu)先級最高(輸入中消費者按優(yōu)先級升序排列)的一個。
若此時沒有訂閱的消費者,該消息被消息隊列丟棄。消費者則會在給定的時刻訂閱消息隊列或取消訂閱。當消息發(fā)送和訂閱發(fā)生在同一時刻時,先處理訂閱操作,即同一時刻訂閱的消費者成為消息發(fā)送的候選。.當消息發(fā)送和取消訂閱發(fā)生在同一時刻時,先處理取消訂閱操作,即消息不會被發(fā)送到同一時刻取消訂閱的消費者
輸入描述
輸入為兩行
第一行為2N個正整數(shù),代表發(fā)布者發(fā)送的N個消息的時刻和內(nèi)容為方便解折,消息內(nèi)容也用正整數(shù)表示)。第一個數(shù)字是第一人消息的發(fā)送時刻,第二個數(shù)字是第一個消息的內(nèi)容,以此類推。用例保證發(fā)送時刻不會重復,但注意消息并沒有按照發(fā)送時刻排列。
第二行為2M個正整數(shù),代表M個消費者訂閱和取消訂閱的時刻。第一個數(shù)字是第一個消費者訂閱的時刻,第二個數(shù)字是第一人消費者取消訂閱的時刻,以此類推。用例保證每個消費者的取消訂閱時刻大于訂閱時刻,消費者按優(yōu)先級 升序排列
兩行的數(shù)字都由空格分隔。N不超過100,M不超過10,每行的長度不超過1000字符.
輸出描述
輸出為M行,依次為M個消費者收到的消息內(nèi)容,消息內(nèi)容按收到的順序排列,且由空格分隔:若某個消費者沒有收到任何消息,則對應的行輸出-1.
示例1:
輸入
2 22 1 11 4 44 5 55 3 33
1 7 2 3
輸出
11 33 44 55
22
說明
消息11在1時刻到達,此時只有第一個消費者訂閱,消息發(fā)送給它,
消息22在2時刻到達,此時兩人消費者都訂閱了,消息發(fā)送給優(yōu)先級最高的第二個消費者:
消息33在時刻3到達,此時只有第一個消費者訂閱,消息發(fā)送給它;
余下的消息按規(guī)則也是發(fā)送給第一個消費者
示例2:
輸入
5 64 11 64 9 97
9 11 4 9
輸出
97
64
說明
消息64在5時刻到達,此時只有第二個消費者訂閱,消息發(fā)送給它
消息97在9時刻到達,此時只有第一消費者訂閱(因為第二個消費者剛好在9時刻取消訂閱),消息發(fā)送給它.11時刻也到達了一個內(nèi)容為64的消息,不過因為沒有消費者訂閱,消息被丟棄
Java 實現(xiàn):https://renjie.blog.csdn.net/article/details/130957179
Python實現(xiàn):https://renjie.blog.csdn.net/article/details/130958277
C++ 實現(xiàn):https://renjie.blog.csdn.net/article/details/131023424
JavaScript實現(xiàn):https://renjie.blog.csdn.net/article/details/131109535
C實現(xiàn):https://renjie.blog.csdn.net/article/details/129190260