
1. 2026年CSP-S初賽整體印象與考點(diǎn)分布1.1 試卷結(jié)構(gòu)與題型變化先說結(jié)論2026年CSP-S初賽的卷面結(jié)構(gòu)和近三年保持高度一致依舊是“單選閱讀程序完善程序”三大板塊??偡?00分其中單項(xiàng)選擇題15題共30分閱讀程序題3大題共40分完善程序題2大題共30分。對于一直按往年真題備考的同學(xué)來說拿到卷子不會有任何陌生感。不過這不代表今年沒有變化。從考生回憶反饋來看選擇題部分個別題目的問法更“繞”了。比如往年直接考“哈夫曼編碼中若字符a出現(xiàn)頻率最高則它的編碼長度一定最短”這種判斷題干對錯的題目少了很多取而代之的是要求你在多個描述里選出“錯誤的一項(xiàng)”或“最不恰當(dāng)?shù)囊豁?xiàng)”并且四個選項(xiàng)里往往有兩個乍看都對。這種出題方式的轉(zhuǎn)變其實(shí)是在測試你對概念理解的精確程度而不是單純死記結(jié)論。閱讀程序題方面今年三道大題的知識點(diǎn)分布比較均勻一道偏模擬與字符串處理一道偏樹上DFS一道偏數(shù)學(xué)推導(dǎo)與遞推。其中數(shù)學(xué)遞推那道題目在第二小問的判斷里設(shè)置了很隱蔽的邊界條件不少考生在草稿紙上手算前幾項(xiàng)數(shù)列時沒問題但一遇到n0或n1的特判就栽了。完善程序題仍然是“動態(tài)規(guī)劃貪心/二分”的經(jīng)典組合整體難度中等偏上沒有出現(xiàn)冷門算法。1.2 難度感知與區(qū)分度分析考完試后在交流群里做了個小范圍統(tǒng)計(jì)約一百多位考生自評成績大家的主觀感受是選擇題比去年順手閱讀程序題比去年難完善程序題難度持平。這個反饋其實(shí)很有價值因?yàn)樗馕吨衲瓿踬惖膮^(qū)分度重心發(fā)生了轉(zhuǎn)移。往年經(jīng)常出現(xiàn)的情況是選擇題里兩三道偏題直接卡住一大部分人閱讀程序題反而可以通過“暴力模擬”硬算出來。但今年選擇題整體偏基礎(chǔ)很多題目只要認(rèn)真學(xué)過一輪C語法和數(shù)據(jù)結(jié)構(gòu)的同學(xué)都能做對那么大家的差距就被壓縮了。相反閱讀程序題的代碼量比去年略大其中第二道樹相關(guān)題目的遞歸層數(shù)和狀態(tài)轉(zhuǎn)移邏輯都比較復(fù)雜想通過純手工模擬走完全程非常耗時必須真正讀懂代碼意圖才能高效解題。這就給下一屆考生一個非常明確的信號初賽早就不是“背背概念、刷刷舊題”就能輕松過關(guān)的階段了。閱讀程序題越來越像在做“不需要寫代碼的算法題”你要能夠在腦子里運(yùn)行代碼、預(yù)測狀態(tài)變化、判斷邊界條件這其實(shí)比寫代碼更難因?yàn)樗荒芤蕾嚲幾g器和調(diào)試器。1.3 考點(diǎn)分布統(tǒng)計(jì)表下面這張表是我根據(jù)考生回憶和考后討論整理的考點(diǎn)分布情況雖然不是官方數(shù)據(jù)但能反映今年試卷的整體傾向。表格里的難度星級是主觀評價滿分5星方便你快速定位薄弱環(huán)節(jié)。題型涉及知識點(diǎn)大致分值難度單選計(jì)算機(jī)常識進(jìn)制、存儲、網(wǎng)絡(luò)約4分2星單選C語言基礎(chǔ)數(shù)組、指針、遞歸約8分3星單選數(shù)據(jù)結(jié)構(gòu)棧、隊(duì)列、二叉樹約8分3星單選算法策略排序、貪心、分治約6分3星單選數(shù)學(xué)排列組合、概率、位運(yùn)算約4分4星閱讀程序字符串模擬約13分3星閱讀程序樹與DFS約14分4星閱讀程序遞推與數(shù)學(xué)推導(dǎo)約13分4星完善程序動態(tài)規(guī)劃背包/區(qū)間類約15分4星完善程序二分貪心校驗(yàn)約15分4星這里需要特別提醒一句不要因?yàn)椤坝?jì)算機(jī)常識”只占4分就直接放棄。在初賽這個分?jǐn)?shù)密度極高的場景里每一道選擇題都價值2分基本等同于復(fù)賽里一道子任務(wù)的分?jǐn)?shù)。我見過太多考生覺得進(jìn)制轉(zhuǎn)換簡單結(jié)果在“十六進(jìn)制數(shù)A1.2轉(zhuǎn)二進(jìn)制”這種基礎(chǔ)題上翻車原因就是平時刷題只動眼不動筆考場上手忙腳亂。細(xì)節(jié)永遠(yuǎn)是初賽的主旋律。2. 核心真題逐題拆解與解析2.1 單項(xiàng)選擇題高頻考點(diǎn)與典型真題解析單項(xiàng)選擇題作為全卷的第一板塊考察面向來很廣。根據(jù)考生回憶整理我把今年幾道具有代表性的題目拿出來做詳細(xì)拆解幫助大家理解出題人的意圖。第一道值得說的是二叉樹遍歷的推導(dǎo)題。題目已知某二叉樹的前序遍歷序列為ABDCEF中序遍歷序列為DBAECF要求選出后序遍歷的正確結(jié)果。這類題目年年考但每年都有考生因?yàn)椤爸挥浛谠E、不懂還原”而做錯。正確做法是從前序遍歷中確定根節(jié)點(diǎn)A再拿著A去中序遍歷里切分左右子樹左子樹的中序是DB右子樹的中序是ECF。接著看前序中剩余節(jié)點(diǎn)BDCEFB排在最前說明B是左子樹的根D是B的右孩子因?yàn)樵谥行蚶顳在B的右側(cè)。右子樹同理C是根E和F分別是C的左、右孩子。最終后序應(yīng)該是D B E F C A。這道題沒有任何技巧花活純粹考察你對兩種遍歷性質(zhì)的理解是否扎實(shí)。第二道比較有迷惑性的題目考查了哈夫曼編碼的性質(zhì)。題目給出四個描述A. 哈夫曼編碼是一種前綴編碼B. 出現(xiàn)頻率越高的字符其編碼長度越短C. 哈夫曼樹的帶權(quán)路徑長度是最小的D. 在有n個葉子節(jié)點(diǎn)的哈夫曼樹中節(jié)點(diǎn)總數(shù)為2n-1。很多考生在B和D之間猶豫實(shí)際上B的說法不夠嚴(yán)謹(jǐn)因?yàn)樵谀承┨囟l率組合下可能出現(xiàn)頻率較高的字符與另一個字符編碼長度相同的情況哈夫曼算法只能保證帶權(quán)路徑長度最小不能保證每個字符的編碼長度嚴(yán)格隨頻率單調(diào)變化。D則是哈夫曼樹的基本性質(zhì)正確。所以B是這道題要選的錯誤描述。這提醒我們基礎(chǔ)結(jié)論一定要看透成立的前提條件別用直覺代替嚴(yán)格定義。第三道題是常見的時間復(fù)雜度估算題。已知某段程序在數(shù)據(jù)規(guī)模n10^6時運(yùn)行耗時約1秒假設(shè)時間復(fù)雜度為O(n log n)那么在相同軟硬件環(huán)境下數(shù)據(jù)規(guī)模n10^7時的運(yùn)行時間大約最接近多少很多同學(xué)直接套“10倍規(guī)模就是10倍時間”忽略了log因子。正確的估算應(yīng)該是10^7 log(10^7) 除以 10^6 log(10^6) 約等于10乘以7/6約11.7秒。這道題本身不算難但它背后考察的是對復(fù)雜度含義的真實(shí)理解單純背公式的人看到log就懵而有數(shù)學(xué)底子的同學(xué)很快就能列式計(jì)算。2.2 閱讀程序題從代碼中找思路閱讀程序題是初賽的“半壁江山”也是拉開分?jǐn)?shù)差距的核心。這里我以今年回憶度較高的一道字符串模擬題為例給出一段簡化后的程序思路帶你走一遍完整的分析流程。#include iostream using namespace std; int main() { string s; cin s; int cnt 0; string t ; for (int i 0; i (int)s.length(); i) { if (s[i] 0 s[i] 9) { cnt; if (cnt % 2 1) t s[i]; } else { cnt 0; } } cout t endl; return 0; }這段代碼的功能是掃描字符串s統(tǒng)計(jì)每一位數(shù)字字符并且每當(dāng)數(shù)字字符的累計(jì)計(jì)數(shù)為奇數(shù)時就把該字符加入輸出串t一旦遇到非數(shù)字字符計(jì)數(shù)cnt清空重新開始。程序最后輸出t。這道題的判斷和選擇選項(xiàng)里比較常見的有“如果輸入為12345輸出135”“如果輸入為a1b12輸出11”“如果輸入全為數(shù)字且長度為偶數(shù)則輸出長度為n/2”。前兩個模擬后都成立但第三個說法需要小心長度為偶數(shù)的全數(shù)字串輸出的是奇數(shù)位置的數(shù)字長度為n/2確實(shí)成立。真正容易錯的是“如果輸入包含連續(xù)兩個數(shù)字塊第二個塊的第一個數(shù)字一定不會輸出”這個描述因?yàn)閏nt在遇到非數(shù)字字符后清空所以第二個數(shù)字塊的第一個數(shù)字cnt從1開始是奇數(shù)會被輸出。這種細(xì)節(jié)只要手推一次就能發(fā)現(xiàn)但很多考生在考場上為了趕時間不推直接憑感覺選結(jié)果白白丟分。我個人的建議是面對閱讀程序題時務(wù)必在草稿紙上畫出狀態(tài)變量的變化表格。不要怕慢一道程序題畫完表格后后續(xù)所有判斷和選擇都能快速定位。你省掉的不是時間而是因?yàn)椤跋氘?dāng)然”造成的失誤。2.3 完善程序題算法與代碼填空技巧完善程序題是初賽中最綜合的題型它不給完整程序而是讓你在關(guān)鍵位置填寫空缺的表達(dá)式或語句。今年的兩道完善程序題一道是動態(tài)規(guī)劃中的最長上升子序列變體一道是二分答案套貪心校驗(yàn)。先看最長上升子序列這個話題。基礎(chǔ)的LIS問題大家都很熟O(n^2)動規(guī)的思路是dp[i]表示以第i個元素結(jié)尾的最長上升子序列長度狀態(tài)轉(zhuǎn)移時遍歷i之前的所有j如果a[j] a[i]就用dp[j]1更新dp[i]。但今年這道題在原始LIS之上加了一個限制要求選出的子序列中相鄰兩個元素在原數(shù)組中的位置差不能超過K。這個限制條件導(dǎo)致狀態(tài)轉(zhuǎn)移只能參考下標(biāo)在i-K到i-1之間的元素所以需要配合單調(diào)隊(duì)列優(yōu)化否則復(fù)雜度會超限。完善程序里比較典型的填空位置有單調(diào)隊(duì)列中元素出隊(duì)條件、新元素入隊(duì)前對隊(duì)尾的淘汰條件、以及最終答案的統(tǒng)計(jì)方式。出隊(duì)條件要寫成“隊(duì)列頭部下標(biāo)小于i-K時出隊(duì)”這是滑動窗口的經(jīng)典寫法隊(duì)尾淘汰條件則是“當(dāng)前dp值大于等于隊(duì)尾元素對應(yīng)的dp值時彈出隊(duì)尾”目的是維護(hù)隊(duì)內(nèi)dp值單調(diào)遞減。這里很容易填反本質(zhì)原因是對單調(diào)隊(duì)列維護(hù)的意義理解不足。插入新元素之前隊(duì)里存的應(yīng)該是當(dāng)前窗口內(nèi)有用的候選下標(biāo)淘汰掉所有dp值比當(dāng)前元素小的隊(duì)尾后再把當(dāng)前下標(biāo)入隊(duì)這樣隊(duì)頭始終是窗口內(nèi)dp值最大的位置的索引。至于二分答案貪心校驗(yàn)?zāi)堑李}難度主要體現(xiàn)在check函數(shù)的構(gòu)造上。題目背景大致是一排物品需要分組每組重量總和不能超過limit要求盡可能少分組問最小需要的組數(shù)。常規(guī)貪心是從左到右掃一遍能塞進(jìn)當(dāng)前組就塞塞不下就新開一組。實(shí)現(xiàn)方式很簡單但填空位置考察的是二分的邊界處理。我見過太多人在二分邊界上寫錯導(dǎo)致雖然思路對填出來的代碼在極限數(shù)據(jù)下會陷入死循環(huán)。一個穩(wěn)妥的模板是l 最大值r 總和while (l r) 時 mid取(lr)/2更新時lmid1或rmid。這個模板只要你每次寫完四個邊界條件都帶入兩個相鄰數(shù)據(jù)驗(yàn)一遍基本不會出問題。3. 關(guān)鍵知識點(diǎn)與易錯點(diǎn)深度剖析3.1 樹與圖論題目的常見坑樹與圖論是CSP-S初賽中分量最重的數(shù)據(jù)結(jié)構(gòu)板塊基本上每年都會在單選、閱讀程序、完善程序三個題型中同時出現(xiàn)。結(jié)合今年的題目反饋我總結(jié)出三個反復(fù)出現(xiàn)的陷阱。第一個陷阱是“二叉樹節(jié)點(diǎn)數(shù)與邊數(shù)的關(guān)系混淆”。很多同學(xué)記得“一棵有n個節(jié)點(diǎn)的樹有n-1條邊”也記得“二叉樹中度為2的節(jié)點(diǎn)數(shù)等于葉子節(jié)點(diǎn)數(shù)減1”但把這兩個結(jié)論混在一起用。比如題目給出一棵完全二叉樹告訴你總節(jié)點(diǎn)數(shù)要你求葉子節(jié)點(diǎn)數(shù)量必須先判斷n的奇偶性再套深度關(guān)系。完全二叉樹中最后一個節(jié)點(diǎn)的位置決定葉子數(shù)量的微妙差別每年都能篩掉一批粗心的考生。第二個陷阱是圖的存儲方式與復(fù)雜度對應(yīng)關(guān)系。鄰接矩陣適合稠密圖空間復(fù)雜度O(V^2)判斷兩點(diǎn)之間是否有邊的時間復(fù)雜度O(1)鄰接表適合稀疏圖空間復(fù)雜度O(VE)。這個知識點(diǎn)本身不難但考試時經(jīng)常和最短路徑算法綁定考察。比如問你“用Dijkstra算法在稀疏圖中求單源最短路徑采用什么存儲結(jié)構(gòu)更合適”不少考生一看到Dijkstra就條件反射選鄰接矩陣卻忘了題目強(qiáng)調(diào)稀疏圖。優(yōu)先隊(duì)列優(yōu)化的Dijkstra配合鄰接表才是正解。第三個陷阱是拓?fù)渑判虻摹安晃ㄒ恍浴迸袛?。今年閱讀程序題里出現(xiàn)了一段基于入度數(shù)組實(shí)現(xiàn)拓?fù)渑判虻拇a判斷選項(xiàng)中有一項(xiàng)說“如果圖中有多個入度為0的節(jié)點(diǎn)算法輸出結(jié)果唯一”這個說法當(dāng)然錯誤。更隱蔽的是有的考生懂得拓?fù)渑判虿晃ㄒ坏鎸Α敖o定一個圖判斷是否存在拓?fù)渑判颉边@個問題時容易誤以為只要無環(huán)就一定存在唯一拓?fù)湫?。事?shí)上唯一拓?fù)湫蛞笕我鈺r刻入度為0的節(jié)點(diǎn)最多一個這個加強(qiáng)條件才是區(qū)分點(diǎn)。3.2 動態(tài)規(guī)劃與遞推的識別技巧初賽的完善程序題里動態(tài)規(guī)劃幾乎是一種必考題型。但初賽不像復(fù)賽那樣要你從頭設(shè)計(jì)DP狀態(tài)更多是給出現(xiàn)成的狀態(tài)定義和轉(zhuǎn)移框架讓你填充細(xì)節(jié)。所以備考的重點(diǎn)應(yīng)該放在“如何快速識別一道題要考DP”以及“如何理解狀態(tài)轉(zhuǎn)移方程在代碼中的實(shí)現(xiàn)”。識別DP題目的核心信號有三個重疊子問題、最優(yōu)子結(jié)構(gòu)、無后效性。放在具體題目里看如果題干里出現(xiàn)“求最大/最小值”“求方案總數(shù)”“求是否有可行解”這三類問題同時數(shù)據(jù)范圍暗示你需要一個多項(xiàng)式級別的算法那基本就要往DP方向思考了。初賽的DP題很難出現(xiàn)狀壓和樹形DP最常見的是線性DP、區(qū)間DP和背包問題所以優(yōu)先匹配這幾類模板。今年的最長上升子序列變體題目就是一個很好的例子。題目里出現(xiàn)了“位置差不能超過K”的限制這其實(shí)是把經(jīng)典的LIS問題從一維擴(kuò)展成滑動窗口版本。我建議備考時把LIS、LCS、最大子段和、編輯距離四個經(jīng)典線性DP模型全部手寫一遍不需要背代碼但要能在五分鐘內(nèi)向自己講清楚“dp數(shù)組的下標(biāo)含義是什么”“轉(zhuǎn)移方程為什么這么寫”“邊界條件從哪里來”。當(dāng)你達(dá)到這種熟悉程度時完善程序題的空格基本就是送分題了。3.3 數(shù)學(xué)基礎(chǔ)與位運(yùn)算的速算方法CSP-S初賽對數(shù)學(xué)基礎(chǔ)的考察一直很穩(wěn)定排列組合、概率、進(jìn)制轉(zhuǎn)換、位運(yùn)算這四塊幾乎年年有。今年單選題里出現(xiàn)了一道組合數(shù)學(xué)題大意是從7個不同的小球中選出3個放入兩個不同盒子每個盒子至少一個球問有多少種放法。這類題是典型的“先分組再分配”思路是先把3個球分成兩組方案數(shù)為C(3, 2)因?yàn)橐唤M1個、另一組2個等價于選出單獨(dú)一組的球再把兩組分配到兩個不同盒子方案數(shù)為2!最后從7個球中選出3個球的方案是C(7, 3)三者相乘得到結(jié)果。很多考生直接算C(7,3)乘2忽略了兩組球數(shù)量不同導(dǎo)致的分組復(fù)雜度結(jié)果自然是錯的。位運(yùn)算部分今年考了一道“判斷x是否為2的冪”的常見技巧題核心表達(dá)式是(x (x - 1)) 0。這個表達(dá)式務(wù)必連原理一起理解一個數(shù)是2的冪時其二進(jìn)制表示中只有一位是1減1后低位全變1高位借位變0與運(yùn)算結(jié)果就是0。這一招在閱讀程序題的代碼里也經(jīng)常出現(xiàn)屬于性價比非常高的考點(diǎn)。進(jìn)制轉(zhuǎn)換則是每年必考的基礎(chǔ)我強(qiáng)烈建議把“二進(jìn)制小數(shù)轉(zhuǎn)十進(jìn)制”“十六進(jìn)制與二進(jìn)制的四位一組轉(zhuǎn)換法”這兩種操作練成本能反應(yīng)??紙錾习床烤桶嘧龀ǔ朔ǘ紒淼眉暗绻隳苡盟奈灰唤M的技巧快速轉(zhuǎn)換節(jié)省下來的時間足夠檢查三道判斷題。4. 初賽備考路線與真題使用策略4.1 真題應(yīng)該在什么階段刷很多初次備考CSP-S的同學(xué)會陷入一個誤區(qū)暑假一開始就瘋狂刷歷年初賽真題一天一套感覺自己狀態(tài)極佳。但到了考前半個月卻發(fā)現(xiàn)真題已經(jīng)全部做完只能靠做模擬題續(xù)命而模擬題的出題質(zhì)量參差不齊反而越做越慌。我的建議是把真題分兩輪使用。第一輪放在系統(tǒng)學(xué)習(xí)知識點(diǎn)之后暑假前中期目的是“檢測短板”。在這一輪里可以不計(jì)時、不模擬做錯的題目標(biāo)記出對應(yīng)的知識模塊然后返回教材和網(wǎng)課去補(bǔ)那一塊內(nèi)容。比如閱讀程序題里二叉樹遍歷部分錯得離譜那就去專門刷二十道二叉樹的手工模擬題直到形成肌肉記憶。第二輪放在考前兩周目的是“訓(xùn)練節(jié)奏”每天上午固定時間完整做一套真題嚴(yán)格按照考場時間限制自己不會的題先跳過等整套做完再回頭研究。這樣你才能真實(shí)模擬考場上的時間壓力。這里特別提醒一下不要盲目崇拜“刷題數(shù)量”。初賽真題總量本來就不多2000年后的NOIP普及組/提高組真題、CSP入門組和提高組真題加起來也就三四十套每做一套都要榨干它的價值不能做完對完答案就翻篇。我認(rèn)識的優(yōu)秀選手一套題做三遍第一遍正常做第二遍只做錯題和蒙對的題第三遍在考前一周把整套題目的考察點(diǎn)列成大綱自查還有哪些知識點(diǎn)會模糊。三遍下來這套題的利用效率是完全不同的。4.2 錯題復(fù)盤的正確姿勢錯題復(fù)盤不是把正確答案抄在旁邊就完事了。我見過太多人錯題本記得工工整整但錯過的題下次碰到照樣錯原因就是復(fù)盤停留在“記錄答案”層面沒有還原當(dāng)時的錯誤路徑。有效的復(fù)盤必須回答三個問題。第一我當(dāng)時為什么選了錯誤選項(xiàng)是因?yàn)橹R點(diǎn)沒學(xué)過還是學(xué)過但沒記牢還是做題時馬虎看錯條件把原因具體寫下來比如“誤以為完全二叉樹的最后一個節(jié)點(diǎn)一定在最后一層的最右邊”這種描述才有價值光寫“概念不清”等于沒寫。第二正確選項(xiàng)的解題路徑是什么要手寫一遍推導(dǎo)過程把每一步的依據(jù)都標(biāo)出來。第三如果題目換一個數(shù)字、換一個限制條件會怎么變化這一步是在訓(xùn)練舉一反三能力也是最能拉開差距的一步。對于閱讀程序題和程序填空錯題改進(jìn)方法是把代碼自己敲到電腦里跑一遍然后故意改動條件觀察輸出變化。這個過程能幫你建立“代碼行為”的直覺。很多同學(xué)平時只寫題解不動手一到考場看到陌生代碼就緊張本質(zhì)上是因?yàn)樗麑Υa執(zhí)行的預(yù)測能力沒有被訓(xùn)練過。閱讀程序題考的就是預(yù)測能力而預(yù)測能力只能通過大量“手算機(jī)算對照”來提升。4.3 考場時間分配與應(yīng)試技巧CSP-S初賽的考試時間是兩小時滿分100分。從我自身參賽和監(jiān)考經(jīng)驗(yàn)來看時間分配策略直接影響最終分?jǐn)?shù)。建議把時間切成三塊前30分鐘專注做完單項(xiàng)選擇題遇到卡殼超過3分鐘的題目先憑第一印象標(biāo)記直接跳過中間70分鐘處理閱讀程序題這是全卷最耗時也最需要草稿紙的部分每道題都要把程序執(zhí)行的關(guān)鍵狀態(tài)記錄下來最后20分鐘留給完善程序題和之前跳過的題目。單項(xiàng)選擇題要善用排除法。四個選項(xiàng)全不會時先從明顯違背基本概念的選項(xiàng)入手排除。比如題目問“關(guān)于二叉樹的說法正確的是”如果出現(xiàn)“度為2的節(jié)點(diǎn)數(shù)一定比葉子節(jié)點(diǎn)少”這種話即使你對具體概念很模糊也能憑常識判斷它過于絕對。初賽選擇題經(jīng)常會有兩個特別荒謬的干擾項(xiàng)把它們干掉之后二選一正確率會高很多。閱讀程序題務(wù)必先看問題再看代碼。不要上來就逐行讀代碼那樣既浪費(fèi)時間又抓不住重點(diǎn)。先掃一眼選擇題/判斷題問的是“輸出結(jié)果”還是“功能描述”還是“算法復(fù)雜度”帶著問題去讀代碼。如果代碼里有遞歸不要試圖展開所有遞歸層數(shù)先寫幾層找規(guī)律再用數(shù)學(xué)歸納法輔助判斷。今年那套樹上的閱讀題展開前兩層時我就找到了規(guī)律后面直接套公式驗(yàn)證省下大量時間。完善程序題要在讀代碼之前先確定算法。就像做英語完形填空要先通讀全文一樣你要通過變量命名和關(guān)鍵循環(huán)結(jié)構(gòu)判斷這段代碼用的是哪種算法框架。確定是動態(tài)規(guī)劃還是貪心還是二分再去逐個空位填空。如果某個空完全沒思路不要死磕填上一個最符合語法的選項(xiàng)然后繼續(xù)往后看后面的代碼往往藏有對前面空格的暗示。5. 常見問題與考生反饋整理5.1 考生最常見的失分原因考后群里聊了一圈結(jié)合我給多位考生做的復(fù)盤發(fā)現(xiàn)今年的失分原因非常集中。下面整理成表格方便你對照自己的問題。失分原因典型表現(xiàn)解決思路概念記憶不精確哈夫曼編碼那類概念判斷題出錯回歸教材逐條推導(dǎo)結(jié)論成立條件閱讀程序手算能力不足遞歸和循環(huán)嵌套較深時直接放棄平時多畫狀態(tài)表練習(xí)“人肉編譯器”時間復(fù)雜度估算憑感覺只按倍數(shù)估算忽略log等系數(shù)多練log運(yùn)算與估算題填空只看局部代碼完善程序中孤立地填每個空缺少全局算法意識先確定算法框架再逐空作答答題速度分配失衡在閱讀理解題上耗時太多導(dǎo)致沒時間做填空嚴(yán)格按時間塊執(zhí)行練習(xí)模擬考試特別想說的是“概念記憶不精確”這個問題。計(jì)算機(jī)科學(xué)里很多結(jié)論都帶限制條件比如“二叉樹第i層最多有2^(i-1)個節(jié)點(diǎn)”的前提是根節(jié)點(diǎn)深度為1“n個節(jié)點(diǎn)的完全二叉樹高度為log2N向下取整加一”也是對完全二叉樹而言。初賽選擇題特別喜歡考這些前提坑的就是那些“好像在哪里見過”的同學(xué)。刷題時一旦遇到這種結(jié)論不要只記結(jié)論本身要同時記適用條件。把知識點(diǎn)做成小卡片考前三天每天翻一遍效果遠(yuǎn)好于考前臨時抱佛腳。5.2 從初賽到復(fù)賽的銜接準(zhǔn)備初賽結(jié)束并不意味著可以休息CSP-S復(fù)賽通常在十月下旬舉行中間只有三到四周的準(zhǔn)備時間。根據(jù)考生的反饋今年初賽整體難度適中預(yù)計(jì)晉級分?jǐn)?shù)線與往年相比不會有太大波動所以自我感覺不錯的同學(xué)現(xiàn)在就應(yīng)該把重心放在復(fù)賽真題訓(xùn)練上。復(fù)賽和初賽的考察方式完全不同。初賽更在意知識廣度與代碼閱讀能力復(fù)賽則要求你在四到五個小時內(nèi)獨(dú)立完成四道編程題的算法設(shè)計(jì)與實(shí)現(xiàn)。如果你過去的訓(xùn)練主要圍繞刷初賽題展開那么在復(fù)賽前必須完成一次心態(tài)切換從“讀懂別人的代碼”變成“寫出自己的代碼”。建議每天安排至少三小時的連寫代碼時間選用歷年CSP-S復(fù)賽真題嚴(yán)格按考試環(huán)境模擬甚至要練習(xí)對拍和調(diào)試輸出。調(diào)試能力在復(fù)賽中至關(guān)重要因?yàn)榇髽永贿^時你要能快速定位問題出在邊界條件、算法復(fù)雜度還是數(shù)據(jù)類型上。對于初賽過線但分?jǐn)?shù)不高的同學(xué)也不要灰心。我身邊就有初賽壓線晉級復(fù)賽卻拿到省級一等獎的例子。初賽分?jǐn)?shù)線低通常意味著當(dāng)年題目難度較高或區(qū)分度稍弱這種情況下復(fù)賽反而可能出現(xiàn)更基礎(chǔ)的送分題。關(guān)鍵是你能否利用接下來的一個月把最擅長的算法題型練到極致。與其貪多嚼不爛地學(xué)十種算法不如把二分、貪心、背包、搜索、最短路徑這五個高頻考點(diǎn)練得滾瓜爛熟。5.3 一套題的正確打開方式最后分享一個很多人忽略的備考動作把一套真題反復(fù)用三種方式各做一遍。第一遍當(dāng)考生限時完成并計(jì)分第二遍當(dāng)老師用文字給每一道題寫解析甚至可以講給同學(xué)聽第三遍當(dāng)命題人思考如果這道題要改編出題人會在哪個條件上動手腳。這三種角色對應(yīng)三種完全不同的能力。當(dāng)考生訓(xùn)練的是應(yīng)試技巧和時間管理當(dāng)老師訓(xùn)練的是概念表達(dá)的準(zhǔn)確性和推導(dǎo)過程的邏輯性當(dāng)命題人訓(xùn)練的是對知識點(diǎn)的深層理解。尤其第二種方式我在輔導(dǎo)學(xué)生時屢試不爽一個能把題目給別人講明白的學(xué)生其理解深度遠(yuǎn)高于一個人刷完三套卷子的學(xué)生。如果你找不到聽你講題的人可以打開手機(jī)錄音自己對著空氣講回放時你會發(fā)現(xiàn)自己有很多地方其實(shí)講不清楚那些講不清楚的地方就是你的知識盲區(qū)。我個人在實(shí)際操作中的體會是備考CSP-S初賽最忌諱的一件事就是“自我感動式刷題”。坐在書桌前耗掉一整個下午結(jié)果只對了一份答案這個下午對你的提升微乎其微。真正有效的備考是每做一步都能感受到自己在哪個具體能力上進(jìn)步了。希望你從今天開始把每一套真題都當(dāng)作一次算法思維的真實(shí)訓(xùn)練而不是一個需要完成的任務(wù)。如果你愿意把在做題過程中遇到的任何“貌似懂了但一做就錯”的知識點(diǎn)拿來討論我相信你一定會比今天大多數(shù)考生的收獲更大。