原创 【CCF 201912-4】區塊鏈(隊列:80分)

寫在前面 最近幾次的CFF-CSP考試,我發現一個趨勢。CSP的第3、4題會與計算機的專業知識密切相關。 例如:化學方程式 – 編譯原理,RAID5 – 操作系統。而本題涉及到的是分佈式系統的應用(區塊鏈)。 題目大意 給出一個

原创 【CCF 201912-3】化學方程式(遞歸下降)

題目描述 第一行給出化學方程式的個數N,隨後N行給出N個化學方程式。 化學方程式的BNF文法如下: 問題分析 類似於編譯原理的語法分析,這裏我們採用遞歸下降的方式解決問題。 接下來,我們將以下面這個方程式爲例來講解我的思路。 3

原创 【CCF201909-4 推薦系統】

寫在前面 本題考察的是對數據結構的建構,以及對STL的熟練運用。沒有選擇正確的數據結構,將會導致本題超時。 另外,此題的測試數據有誤,在輸出某一種類商品的編號時應當按照分數從高到低排序,分數相同時才按編號從小到大排序。如果按照原題

原创 【CCF 201812-4】數據中心(Kruskal算法)

本題思路 題意相當於:生成一棵樹,要求這棵樹的最長邊最短,並求這條最長邊的長度。 Kruskal算法的模板題:首先對邊進行排序,隨後從小到大選取邊,最終得到一棵生成樹。貪心的做法使得每次選取的邊都是最小的,且符合題意。   滿分代碼(C+

原创 【CCF 201812-3】CIDR合併(鏈表,位運算)

寫在前面 本題考查的是對STL::list的熟練運用,以及對位運算的思考;思路在題目中給出的提示當中已經非常清晰。 解題思路 將輸入轉化爲list<前綴IP> struct Prefix { vector<unsigned

原创 【CCF 201903-4】消息傳遞接口(隊列)

本題思路 思路較簡單,用n個隊列模擬n個進程; 每輪循環考慮n個進程的當前指令,若兩個進程的R、S相匹配,則可以出隊; 當一輪中沒有匹配的進程時循環結束; 最後查詢所有隊列,若都爲空則不存在死鎖;   滿分代碼(C++11) #prag

原创 【CCF 201909-3】字符畫(學習IO)

本題的思路不算難,但是需要快速完成需要對C++的IO庫比較熟悉。 本題用到的IO知識 /* 打印字符c對應的<轉移字符> */ void out_char(char c) { // 16進制輸出,大寫字母,寬度2,填充0 co

原创 【CCF 201903-3】損壞的RAID5

RAID5,對於學過操作系統的同學來說應該是比較熟悉的;如何根據塊數確定該塊所在的磁盤號和偏移量,是本題的難點。 本題踩到的一些坑 1. 關於輸入的問題 int num = 0; for (int i = 0; i < l; ++i

原创 【CCF 201903-2】 二十四點(Python 4行代碼)

本題主要使用了eval函數,將字符串作爲Python的一條語句來執行,達到計算表達式的目的。 題目描述 第一行給出一個正整數N,接下來N行各有一個數學表達式。如果表達式的結果爲24點,則輸出"Yes",否則輸出"No"。 問題分

原创 樹的最大連通分支問題

問題描述 給定一棵樹 T,樹中每個頂點 u 都有一個權 w(u),權可以是負數。現在要找到樹 T 的一個連通子圖使該子圖的權之和最大。 對於給定的樹 T,編程計算樹 T 的最大連通分支。 數據輸入 第一行有1個正整數n,表示樹T有n

原创 討論課二:C語言調試與字符串

C語言中scanf函數與空格回車

原创 計算機系統討論課(一)

選題一 見相關資料:浮點數的二進制表示  選題三 問題 printf("%s\n",c)對應輸出"eUNH"呢? 解答 先說一下打印字符串的方法:以c爲首地址,依次打印每一個字節,遇到ASCII碼爲0的字節停止(即遇到字符串終止

原创 浮點數的二進制表示

浮點數的二進制表示

原创 《算法導論》第17章:攤還分析(Amortized analysis)

基本概念 在攤還分析中,我們求數據結構的一個操作序列中所執行的所有操作的平均時間,來評價操作的代價,可以保證最壞情況下每個操作的平均性能。 本文,我們將以“棧操作”爲例來講解三種攤還分析方法。 “棧操作”描述 push(s, x):

原创 《算法導論》:競爭性分析、自組織表

自組織表(Self-Organizing List) 兩種基本操作 access(x):訪問元素x,時間複雜度與x在表中的位置即rank(x)成正相關。 transpose(x):交換x和x的前驅,時間複雜度爲O(1)。 兩種算法 在線