我的個人部落格
原題鏈結
ccf 201903-4訊息傳遞介面 思路
主要的思路是利用佇列來儲存每乙個程序的收發指令。一旦找到匹配的指令,則將這一對出佇列。直到某一次找不到匹配的指令了,退出迴圈。再判斷是不是所有的程序對應的收發指令佇列都為空。如果全部為空,則該程式不存在死鎖,否則程序存在死鎖。
因為每乙個程序有的收發指令的個數是不同的,因此需要處理這樣不定數的輸入。這裡用到了stringstream來進行處理。即
getline
(cin,line)
;//輸入一行字串
stringstream ss
(line)
;while
(ss >> ins)
另外還要值得注意的是,程序n的最多可達10的4次方。因此n可能不止一位數,所有在做題的過程中,不能預設每乙個收發指令的長度是2。這樣就大錯特錯了!
#include
using
namespace std;
struct node};
intmain()
),比起push記憶體消耗更少
// v[i].push(node);//實測這兩個好像都可以 }}
bool flag =
true
;//表示是否有匹配的
while
(flag)}}
//找不到匹配的元素了
if(isfind ==
false)}
flag =
true
;//判斷指令全部匹配完。即判斷佇列是否為空即可
for(
int i=
0;i++i)}if
(flag)
else
}}
CCF 201903 4 訊息傳遞介面
分析 這次的出題老師貌似特別擅長作業系統,第三道才考磁碟陣列,第四道立刻又來了道死鎖。本著預設第四道是圖論或者dp的想法,看完題目覺得可能不會像表面那麼簡單,但是做完發現還真的只是道模擬題。比較坑的是開始做題一直提交二十分,提示錯誤。仔細重新讀題若干遍,又檢查 若干遍,不管如何改都是二十分。最後看了...
CCF 201903 4 試題名稱 訊息傳遞介面
參加了這場認證,及格分都沒拿到,最近準備二戰。當時感覺這道題寫得挺有把握的,結果只拿了60分,原因我就不說了,反正菜就對了。下面就來分享下做題思路 其實實現思路非常簡單,只是稍微有點繞。當你看測試樣例的時候,其實你腦袋裡就在模擬訊息傳遞的過程。其實這道題也就是模擬那個過程,沒有什麼獨特的演算法,最多...
CCF CSP題解 201903 4 訊息傳遞介面
求並行的各個程序,且程序內部順序執行的情況下,會不會出現 死鎖 首先用 n 將每個程序讀入。最後過不了居然是因為 str 開小了 悲喜交加。儲存在 中,並記錄每個程序的指令數 instnum 然後就是模擬。instcmp 記錄每個程序已完成的指令數,instblk 記錄每個程序是否阻塞,numcmp...