NOIp初賽題目整理

NOIp初賽題目整理

這個 blog 用來整理扶蘇準備第一輪 csp 時所做的與 csp 沒 有 關 系 的歷年 noip-J/S 初賽題目,記錄了一些我從不知道的細碎知識點,還有一些憨憨題目,不定期更新。

1、(07senior,5) 在C 語言中,表達式 \(23~\mid~2~\land^~5\) 的值是( )

​ A. \(23\) B.\(1\) C.\(18\) D.\(32\) E.\(24\)

Answer:A

Solution:這題一看就是要考運算符優先級來着。在 \(C\) 語言中,按位與大於按位異或大於按位或,這裏的大於指優先級大於,優先級越大越優先計算,因此計算過程爲 \(2~\land~5~=~7\)。然後計算 \(23~\mid~7 = 23\)

需要指出的是,左右移的優先級大於上述三個運算,因此 \(C\) 語言表達式 1 | p << 1 是先算 p << 1,再對 \(1\) 取或,例如 \(1~\mid~3~<<~1\) 的答案是 \(9\)

2、(07senior,12) 與十進制數 \(17.5625\) 對應的 \(8\) 進制數是( )。

​ A.\(21.5625\) B.\(21.44\) C.\(21.73\) \(D.21.731\)

Answer:B

Solution:這裏介紹一下分數的進制轉換。先考慮 \(10\) 進制轉換成 \(k\) 進制。

首先整數部分按照整數的進制轉化進行,即不斷除以進制數再取餘數。

然後將原數不斷的去掉整數部分後乘 \(k\),第 \(i\) 次乘 \(k\) 後整數部分的值即爲答案第 \(10^{-i}\) 位的值,一直做直到達到精度位數要求。

例如:\(17.5625\),整數部分被轉換爲 \(21\),去掉整數部分爲 \(0.5625\),乘 \(8\) 得到 \(4.5\),因此十分位爲 \(4\)\(4.5\) 去掉整數部分爲 \(0.5\),乘 \(8\) 得到 \(4.0\),因此百分位爲 \(4\)\(4.0\) 去掉整數部分後爲 \(0\),因此後面的位數都是 \(0\)

對於 \(k\) 進制轉 \(10\) 進制的情況,則整數部分依舊按照整數轉換法則轉換,對於小數部分,將 \(k^i\) 分位的數乘上 \(\frac{1}{k^i}\),相加即可得到 \(10\) 進制小數部分的值。

3、(07senior,14,不定項選擇) 已知 \(7\) 個結點的二叉樹的先根遍歷是 1 2 4 5 6 3 7(數字爲結點的編號,以下同),後根遍歷是 4 6 5 2 7 3 1,則該二叉樹的可能的中根遍歷是( )

A. 4 2 6 5 1 7 3 B. 4 2 5 6 1 3 7 C. 4 2 3 1 5 4 7 D. 4 2 5 6 1 7 3

Answer:A B D

Solution:二叉樹遍歷序什麼的早都忘乾淨了……

衆所周知,二叉樹一共有三種深度優先遍歷序,分別是先序遍歷,中序遍歷和後序遍歷。這裏先中後指的是記錄根的時間,而左右子樹的順序總是先左子樹再右子樹。例如先序遍歷,則先記錄當前子樹的根節點,然後遞歸對左子樹做先序遍歷,再遞歸對右子樹做先序遍歷;而中序遍歷則先對左子樹遞歸做中序遍歷,然後記錄根節點,最後對右子樹遞歸做中序遍歷。

對於一棵樹,只要確定中序遍歷序和另外任意一個深度優先遍歷序,即可唯一確定這棵樹的形態,但是隻知道先序遍歷和後序遍歷則不能唯一確定這棵樹的形態。需要指出的是,確定先序遍歷和後序遍歷以後,即可確定節點間的父子關係,但是無法區分左右節點

對於本題,首先可以鐵憨憨枚舉四個選項,這樣即可得到中序遍歷和先序遍歷,再驗證後序遍歷即可。

考慮更一般化的做法,通過已知的兩個遍歷序確定節點間的父子關係即可。

例如,根據先序遍歷,\(2\) 一定是 \(1\) 的孩子,根據後序遍歷,\(3\) 一定是 \(1\) 的孩子,因此 \(2,~3\) 一定是 \(1\) 的兩個孩子,又因爲 \(2\) 在先序遍歷中比 \(3\) 先出現,所以 \(2\) 是左孩子,\(3\) 是右孩子。

又根據先序遍歷的性質,右孩子左側的一定都是左子樹或根,因此 \(2,~4,~5,~6\) 都在根的左子樹內。根據先序遍歷,\(4\) 要麼是 \(2\) 的孩子,要麼是 \(2\) 的兄弟。但由於 \(3\)\(2\) 的兄弟,所以 \(4\)\(2\) 的孩子。

根據後序遍歷,可以確定 \(5\)\(2\) 的另一個孩子,又由於 \(4\)\(5\) 之前出現,因此 \(4\) 是左孩子,\(5\) 是右孩子。

根據先序遍歷,\(6\)\(5\) 的孩子,但是由於 \(5\) 只有一個孩子,無法確認左右。至此,左子樹的父子關係已經全部確定,類似的可以確定右子樹的父子關係,然後即可確定可能的中序遍歷。

今年 CSP 只考選擇題來着,我還是選擇鐵憨憨枚舉選項吧

4、(07senior,18,不定項選擇) 在下列關於算法複雜性的說法中,正確的有( )。

A. 算法的時間複雜度,是指它在某臺計算機上具體實現時的運行時間

B. 算法的時間複雜度,是指對於該算法的一種或幾種主要的運算,運算的次數與問題的規模之間的函數關係

C. 一個問題如果是NPC類的,就意味着在解決該問題時,不存在一個具有多項式時間複雜度的算法.但這一點還沒有得到理論上的證實,也沒有被否定

D. 一個問題如果是NP類的,與C有相同的結論

Answer:BC

Solution:首先 A,B 的對錯顯然,這邊記錄一下有關P問題,NP問題,NPC問題,NP-Hard問題的有關定義。

對於一個問題,如果它可以使用多項式時間複雜度的算法進行求解,則它是一個 P問題(polynomial problem),這裏 polynomail 指的是 “多項式的”。例如,給定 \(n\) 個數對他們按照不降序進行排序,可以使用 \(O(n \log n)\) 的算法解決,因此這個問題是一個P問題。

對於一個問題,如果它可以用多項式時間複雜度的算法來驗證一個解的正確性,則他是一個 NP問題(Non-deterministic Polynomial Problem),這裏 Non-deterministic 指 “不確定的”,NP問題的中文直譯爲 “非確定性多項式問題”。這裏不要求對原問題進行求解,只要給出原問題的一個解以後就可以用多項式的算法來驗證這個解是否正確的問題,都被稱爲 NP 問題。例如,“對於一張 \(n\) 個點 \(m\) 條邊的有向圖,求它的一條迴路滿足經過每個節點恰好一次”這個問題(哈密爾頓迴路)想要求解目前只有指數級的枚舉每條邊的選擇情況,但是一旦我給出這個問題的一個解,我便可以使用 \(O(m)\) 的算法來輕鬆驗證這個解是否正確,因此這個問題是一個 NP 問題。同樣的,對於上面一段的排序問題,如果你給出了它的一個解,我顯然可以 \(O(n)\) 去驗證這個解是否正確,因此“給 \(n\) 個數進行排序” 也是一個 NP 問題。

一個可以證明的事實是,一個 P 問題一定是一個 NP 問題,也即一個可以用多項式時間複雜度求解的問題一定是可以用多項式時間複雜度檢驗一個解的正確性。因此,P 問題集合是 NP 問題集合的子集。而 P 問題集合是否等於 NP 問題集合,就是著名的 P-NP 問題,又成爲 P =? NP 問題。目前的普遍觀點是不等於,但是無法給出證明。

歸約:對於一個問題 \(A\),如果他能經過多項式時間複雜度的轉化而轉化成問題 \(B\),也即得出問題 \(B\) 的解以後可以用多項式的時間複雜度轉化爲問題 \(A\) 的解,則稱 \(A\) 可以 歸約\(B\)。例如將一元一次方程加上一個係數爲 \(0\) 的二次項以後可以通過求解一元二次方程的方法求解,因此說求解一元一次方程可以歸約爲求解一元二次方程。一個顯然的事實是歸約具有傳遞性,即若 \(A\) 可以歸約爲 \(B\)\(B\) 可以歸約爲 \(C\),則 \(A\) 可以歸約爲 \(C\)。顯然,只要可以使用多項式複雜度解決 \(C\),即可使用多項式複雜度解決 \(A\)

存在一個 NP 問題 \(A\),使得所有 \(NP\) 問題都可以歸約爲 \(A\) 問題,而 \(A\) 問題有很多個並且他們是完全等價的,所有的 \(A\) 問題被稱爲 NPC問題(Non-deterministic Polynomial Complete Problem)。顯然只要給任意一個 NPC 問題找到一個多項式算法,即可用多項式時間複雜度解決所有 NP 問題,從而證明 P = NP,但是目前並不能在多項式時間複雜度內解決任何一個 NPC 問題。根據第一句話,我們給出 NPC 問題的定義:

1、該問題是一個 NP 問題

2、任何一個 NP 問題都可以通過有限次的歸約最終歸約爲該問題

只要滿足上述兩個條件的問題,都被稱爲 NPC 問題。第一個 NPC 問題是邏輯電路問題:給定一個有多個輸入端的和多個邏輯門以及一個輸出端的邏輯電路,求邏輯門的一個輸入滿足這個邏輯門的輸出端爲 true。

對於上面 NPC 問題的定義,如果一個問題滿足第二條,但不一定滿足第一條,則其是一個 NP-Hard問題(Non-deterministic Polynomial Hard Problem)。根據定義,NP-Hard 問題可以被任何一個 NP 問題使用多項式的時間複雜度歸約到,但是自身不一定是一個 NP 問題。

因此我得出結論:NOIp的大部分題目都是 P (霧)

(07senior,21) 給定 \(n\) 個有標號的球,標號依次爲1,2,…,n。將這 \(n\) 個球放入 \(r\) 個相同的盒子裏,不允許
有空盒,其不同放置方法的總數記爲 \(S(n,r)\),求 \(S(7,~4)\)

Answer:350

Solution:沒打算做填空來着,但是看到第二類斯特靈數就記一下吧……反正我也忘了。

題面即爲第二類斯特靈數的定義。當求 \(S(i, j)\) 時,假設前 \(i-1\) 個球都已經放到了盒子裏,現在考慮第 \(i\) 個球:

如果前 \(i-1\) 個球放到了 \(j\) 個盒子裏,那麼這個球隨便找個盒子放即可,方案數爲 \(j \times S_{i - 1,j}\)

如果前 \(i - 1\) 個球放到了 \(j - 1\) 個盒子裏,那麼這個球只能自己新放一個盒子,方案數爲 \(S_{i - 1, j -1}\)

根據加法原理,\(S_{i,j} = S_{i - 1, j - 1} + j \times S_{i - 1, j}\)

(07junior,7) LAN的含義是( )

​ A.因特網 B.局域網 C.廣域網 D.城域網

Answer:B

Solution:休學不考 IT 會考的報應來了

局域網:LAN(Local Area Network);廣域網:WAN(Wide Area Network);城域網:MAN(Metropolitan Area Network)

下次還是對着英文蒙吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章