CCF 201903 4 試題名稱 訊息傳遞介面

2021-09-25 19:19:07 字數 1452 閱讀 5730

參加了這場認證,及格分都沒拿到,最近準備二戰。。

當時感覺這道題寫得挺有把握的,結果只拿了60分,原因我就不說了,反正菜就對了。

下面就來分享下做題思路:

其實實現思路非常簡單,只是稍微有點繞。當你看測試樣例的時候,其實你腦袋裡就在模擬訊息傳遞的過程。其實這道題也就是模擬那個過程,沒有什麼獨特的演算法,最多就是可以用用佇列,下面是實現步驟。

解析訊息行:這個看**,用stringstream解析帶空格的字串行是必備技能

為每個程序設定乙個訊息佇列,將上一步得到的訊息依次存入對應的訊息佇列,這一步可以過濾掉自己發給自己的訊息while一直迴圈,每次迴圈過程為一輪執行,遍歷每個程序,檢查它是否空閒,如果空閒則將它的訊息佇列中的第乙個佇列彈出,存入記錄本輪要執行的訊息陣列中,如果程序已經遍歷完了且訊息陣列還是空,那麼就退出while迴圈,如果訊息陣列不為空則依次執行訊息陣列中的訊息,執行過程見**。

warning:注意n的取值範圍

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

typedef pair<

int,string> p;

using

namespace std;

void

split

(int j, queue

& message,string line)

}int

main()

while(1

)}}if

(curr.

size()

==0)// 沒有訊息執行了就退出

break

;for

(int i =

0;i < curr.

size()

; i++

)else

if(t.second[0]

=='s'

)// 發訊息 }}

int is_lock =0;

for(

int i =

0;i < n; i++)}

cout << is_lock << endl;

}return0;

}

CCF 201903 4 訊息傳遞介面

分析 這次的出題老師貌似特別擅長作業系統,第三道才考磁碟陣列,第四道立刻又來了道死鎖。本著預設第四道是圖論或者dp的想法,看完題目覺得可能不會像表面那麼簡單,但是做完發現還真的只是道模擬題。比較坑的是開始做題一直提交二十分,提示錯誤。仔細重新讀題若干遍,又檢查 若干遍,不管如何改都是二十分。最後看了...

CCF 201903 4訊息傳遞介面(佇列)

我的個人部落格 原題鏈結 ccf 201903 4訊息傳遞介面 思路 主要的思路是利用佇列來儲存每乙個程序的收發指令。一旦找到匹配的指令,則將這一對出佇列。直到某一次找不到匹配的指令了,退出迴圈。再判斷是不是所有的程序對應的收發指令佇列都為空。如果全部為空,則該程式不存在死鎖,否則程序存在死鎖。因為...

ccf 201712 2 試題名稱 遊戲

問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k的倍數或其末位數 即...