前言
一開始查排名的時候不知道為啥翻遍了排名榜都沒找到。
后來才找到了?\(94\) 分竟然沒找到,佩服佩服。
鏈接在這 \(\rightarrow\) 2020 洛谷初賽模擬
如果樂意直接看答案的話,公布一手:
ABCBA CABCB DBACD
FTTTBA
FFTTAA
FFFTCC
CDDAC
CBDCB
題解
單項選擇題
第 \(1\) 題,首先符號位是 \(1\)(負數),其次 \(124_{(10)} = 01110010_{(2)}\),補碼即為 \(10001101\),然后接上符號位是 \(10001110\). 選 \(A\).
第 \(2\) 題排除法,\(ACD\) 都是著名 \(\text{OJ}\),選 \(B\).
第 \(3\) 題,考慮一個類似 \(\text{Cantor}\) 的做法。
\((B-A) * 26^2 + (Y-A) * 26^1 + (T-A) * 26^0 = 1319\),然后 \(1\) 位的有 \(26\) 個,\(2\) 位的有 \(26^2\) 個,\(1319+26+26^2 = 2021\) 個。
所以編號為 \(2022\),選 \(C\).
第 \(4\) 題,我竟然錯了 \(\frac{4096 * 2160 * 24 bit}{1024 * 1024 * 8} = 25MB\)(物理上的等號,約等於)。選 \(B\).
第 \(5\) 題,本人也沒搞懂是什么算法(后來知道是一個叫 nth_element 的東西)可以做到 \(\mathcal{O}(n)\),但是好像沒說能用算法解決,所以問題轉化為四個復雜度最優的是哪個?選 \(A\).
第 \(6\) 題,\((1)\) 必然是錯的,因為沒有強調 連通圖。\((2)(3)\) 都是對的,\((4)\) 也是錯的。因為樹是無向無環的。選 \(C\).
第 \(7\) 題,我也錯了 其實這題類似於合並果子的最小代價,不過是反向的合並果子(拆分果子?),最優方案是:\(42 = 15 + 27 = (10 + 5) + (13 + 14)\),代價為 \(42 + 15 + 27 = 84\),選 \(A\).
第 \(8\) 題,根據先中遍歷可以唯一確定樹。
\(H\) 是根。然后按照題目的方法(即完全二叉樹的存儲方法,學過線段樹的應該都知道),最大的 \(E\) 為 \(13\). 選 \(B\).
第 \(9\) 題,暴力題,不說了,選 \(C\).
第 \(10\) 題,最優的情況是,第一次查找的就是鏈表第一個元素,第 \(i (i > 1)\) 次查找的是第 \(i-1\) 次查找后插入的元素。\(\mathcal{O}(k)\),選 \(B\).
第 \(11\) 題,可以枚舉。
| \(A\) | \(B\) | \(C\) |
|---|---|---|
| \(5\) | \(1\) | \(0\) |
| \(5\) | \(0\) | \(1\) |
| \(4\) | \(2\) | \(0\) |
| \(4\) | \(1\) | \(1\) |
| \(4\) | \(0\) | \(2\) |
| \(3\) | \(3\) | \(0\) |
| \(3\) | \(2\) | \(1\) |
| \(3\) | \(1\) | \(2\) |
| \(3\) | \(0\) | \(3\) |
| \(2\) | \(4\) | \(0\) |
| \(2\) | \(3\) | \(1\) |
| \(2\) | \(2\) | \(2\) |
| \(2\) | \(1\) | \(3\) |
| \(1\) | \(4\) | \(1\) |
| \(1\) | \(3\) | \(2\) |
| \(1\) | \(2\) | \(3\) |
| \(0\) | \(4\) | \(2\) |
| \(0\) | \(3\) | \(3\) |
\(18\) 種,選 \(D\).
第 \(12\) 題,只有插入排序復雜度為 \(\mathcal{O}(n^2)\). 選 \(B\).
第 \(13\) 題,大概像我這種出題比較多的造數據都會用到。
\([a,b-1] \rightarrow [0,b-a-1] + a \rightarrow \text{rand()}\%\text{(b-a)} + a\),選 \(A\).
第 \(14\) 題,完全圖有 \(7 \times 6 \div 2 = 21\) 條邊,森林有 \(7-1=6\) 條邊,刪去 \(15\) 條,選 \(C\).
第 \(15\) 題,常識題,選 \(D\).
閱讀程序題
第 \(1\) 篇
該程序的功能就是記憶化計算了 \(gu\) 函數的值。\(gu\) 沒有應用意義。可以發現 \(gu_{i,j} = gu_{i,j-1} (j \% 2 =0)\)
- 顯然 \(m\) 是奇數不影響做法。\(F\).
- 會改變,因為那樣會把 \(=m\) 的答案也加上了。\(T\)
- 刪去記憶化的代碼會增高時間復雜度,但不影響答案。\(T\).
- 顯然,\(T\).
- 建立二維表即可,\(B\).
- 記憶化計算 \(nm\) 個值,每次計算復雜度為 \(\mathcal{O}(m)\),所以為 \(\mathcal{O}(m^2n)\),選 \(a\)。
第 \(2\) 篇
我也不知道這程序是干嘛的,題錯了 \(1\) 個。???
不過 \(f\) 存的是最短路,老 \(\text{Floyd}\) 家都知道。
- 老 \(\text{Floyd}\) 家了,肯定影響答案。\(F\).
- 該程序復雜度為 \(\mathcal{O}(n^4 + m)\),雖然 \(m\) 影響很小,但還是含有的。\(F\).
- \(F\) 數組最大為 \(100 \times 10000 = 10^6\),\(\text{ans}\) 最大約可達到 \(10^6 \times 100 = 10^8\),因此 \(10^7\) 不夠大。\(T\).
- 顯然不變,對 \(x\) 和 \(y\) 類似的松弛操作沒有順序。\(T\).
- 我是人工算的,\(A\).
- 都說了是 \(\text{Floyd}\) 了,\(A\).
第 \(3\) 篇
寫過 \(\text{NOIP2016 tg}\) 組合數問題的人應該都知道,\(A_{i,j} = C_i^j\),\(\text{sum}\) 就是楊輝三角的前綴和。
- 顯然,\(i=j\) 時為 \(1\),\(F\).
- 不是排列數,是組合數。可枚舉驗證。\(F\).
- 本來應該是對的,但是由於有模數,\(1000\) 之內的組合數遠遠大於 \(19260817\),可能出現加和模之后變小。\(F\).
- 沒有溢出問題的話,這樣寫是對的。這個寫法也常用來對負數取模。\(T\).
- \(4\) 分!\(10\) 以內的最大組合數為 \(C_{10}^5 = 252\),選 \(C\).
- 手算一下前綴和即可。答案為 \(50\),選 \(C\).
完善程序題
第 \(1\) 篇
理解程序的原理很重要,本人在第 \(2\) 小題也卡了一會兒。
該原理就是,可以建立樹,\(a_i\) 為 \(i\) 的父親。從不被關注的葉子節點開始,葉子節點首先槍斃。然后往上走,如果 當前節點不被槍斃 並且 沒有人關注當前節點的父親節點,則斃掉父親節點。邊也要斷掉。
- 斷邊操作需要減掉一個度。選 \(C\).
- 只有不被關注的節點(葉子節點)才會被 \(\text{dfs}\),選 \(D\).
- 很顯然,對於一條鏈,分奇偶槍斃。選 \(D\).
- 斃掉葉子節點,選 \(A\).
- 最后出現的是沒有訪問過的節點,選 \(C\).
第 \(2\) 篇
顯然,這道題是反向掃一遍,程序原理很簡單。反向更新最小值和和,然后直接算、打擂就行。用棧記錄最后的答案。
- 初始的和為 \(s_n\),選 \(C\).
- 統計和,選 \(B\).
- 計算除最小值以外的平均值。\([i,n]\) 共 \(n-i+1\) 個數,去掉最小值是 \(n-i\) 個,特此說明。選 \(D\).
- \(k\) 和 \(\text{cnt}\) 維護的是棧。出現新的答案,應清空棧,然后加入當前的答案。選 \(C\).
- 同樣的答案直接加入棧中,熟悉棧的操作。選 \(B\).
