藍(lán)橋杯Python省賽78分復(fù)盤(pán):從暴力枚舉到狀壓DP的實(shí)戰(zhàn)策略
1. 賽題復(fù)盤(pán)與整體策略剛結(jié)束的第十五屆藍(lán)橋杯省賽Python B組難度梯度設(shè)置得相當(dāng)有意思既有送分的基礎(chǔ)題也有需要仔細(xì)琢磨的中等題最后壓軸的幾道更是對(duì)算法思維和代碼實(shí)現(xiàn)能力的雙重考驗(yàn)。我這次拿到了78分雖然離頂尖高手還有距離但對(duì)于大多數(shù)志在省一或國(guó)賽入場(chǎng)券的選手來(lái)說(shuō)這個(gè)分?jǐn)?shù)段的分析和題解可能更具參考價(jià)值。這次比賽再次印證了一個(gè)道理在藍(lán)橋杯的賽場(chǎng)上暴力枚舉DFS/BFS、動(dòng)態(tài)規(guī)劃DP、貪心、二分查找和簡(jiǎn)單的數(shù)論知識(shí)是絕對(duì)的主力而Python選手的優(yōu)勢(shì)在于編碼速度和豐富的內(nèi)置庫(kù)但劣勢(shì)也很明顯——同樣的邏輯Python在極限數(shù)據(jù)下的運(yùn)行時(shí)間壓力更大。所以策略的核心就是在有限的時(shí)間內(nèi)為每道題選擇最“經(jīng)濟(jì)”的解法能暴力拿部分分就先拿下有時(shí)間再優(yōu)化一眼能看出標(biāo)準(zhǔn)解法的力求一遍過(guò)。這次省賽的題目整體感覺(jué)是“新瓶裝舊酒”題型還是那些經(jīng)典題型比如日期處理、字符串操作、搜索、DP但題干包裝得更貼近實(shí)際應(yīng)用像“校園美食家”、“神奇的數(shù)組”這類(lèi)題目需要你快速剝離背景抽象出模型。下面我就結(jié)合自己的考場(chǎng)思路和考后的復(fù)盤(pán)對(duì)每道題進(jìn)行詳細(xì)的拆解重點(diǎn)講我當(dāng)時(shí)怎么想的、怎么做的以及考后反思的更優(yōu)解。我會(huì)盡量還原考場(chǎng)上的真實(shí)思考過(guò)程包括那些“差點(diǎn)掉進(jìn)去的坑”。2. 試題逐題精講與思路拆解2.1 基礎(chǔ)題穩(wěn)拿分的“定心丸”省賽的前幾題通常是用來(lái)穩(wěn)定軍心和熱身用的但千萬(wàn)不能大意因?yàn)檫@里的任何失誤都是不可原諒的丟分。第一題日期計(jì)算這類(lèi)題幾乎是藍(lán)橋杯的保留節(jié)目。題干可能會(huì)問(wèn)“從某年某月某日到某年某月某日有多少天”或者“某天是星期幾”。核心考點(diǎn)有兩個(gè)一是閏年的判斷(year % 4 0 and year % 100 ! 0) or (year % 400 0)這個(gè)公式必須像條件反射一樣熟練二是月份天數(shù)的累加這里我強(qiáng)烈建議準(zhǔn)備一個(gè)月份天數(shù)的列表month_days [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]并在閏年時(shí)將二月天數(shù)改為29。我的做法是寫(xiě)一個(gè)函數(shù)days_from_start(year, month, day)計(jì)算從某個(gè)固定起點(diǎn)比如公元1年1月1日到目標(biāo)日期的總天數(shù)兩個(gè)日期相減即可得到間隔。這樣做的好處是避免了復(fù)雜的邊界條件討論代碼不易出錯(cuò)。第二題字符串處理或進(jìn)制轉(zhuǎn)換今年考的是一道關(guān)于字符串重新排列的題。給定一個(gè)字符串按照特定規(guī)則重新排序后輸出。Python處理這種題優(yōu)勢(shì)巨大。關(guān)鍵點(diǎn)在于熟練掌握sorted()函數(shù)的key參數(shù)。例如如果需要按字符出現(xiàn)頻率降序、頻率相同按ASCII碼升序排列一句代碼就能搞定result .join(sorted(s, keylambda c: (-s.count(c), ord(c))))。但要注意在循環(huán)中反復(fù)調(diào)用s.count(c)效率是 O(n2)對(duì)于本題長(zhǎng)度完全足夠但如果字符串很長(zhǎng)更好的做法是用collections.Counter先統(tǒng)計(jì)頻率??紙?chǎng)時(shí)間緊我選擇了前者先確保正確性。注意基礎(chǔ)題務(wù)必使用最穩(wěn)妥、最熟悉的寫(xiě)法。不要為了微小的性能提升去嘗試不熟悉的語(yǔ)法或庫(kù)一旦寫(xiě)錯(cuò)調(diào)試起來(lái)更耗時(shí)。2.2 中等題思維與實(shí)現(xiàn)的“分水嶺”從這幾題開(kāi)始需要一些簡(jiǎn)單的算法設(shè)計(jì)和優(yōu)化思想了。第三題搜索類(lèi)DFS/BFS—— “校園美食家”這題名字很生活本質(zhì)是一個(gè)網(wǎng)格圖上的搜索問(wèn)題。題目描述了一個(gè)校園地圖‘.’代表路‘#’代表障礙‘F’代表美食點(diǎn)。主人公從起點(diǎn)‘S’出發(fā)需要收集至少K個(gè)美食點(diǎn)問(wèn)最短路徑長(zhǎng)度。 我的考場(chǎng)思路狀態(tài)定義最直接的BFS狀態(tài)是(x, y)坐標(biāo)。但這里還需要記錄收集到的美食點(diǎn)數(shù)量。所以狀態(tài)必須擴(kuò)展為(x, y, count)其中count是當(dāng)前已收集的美食點(diǎn)數(shù)。狀態(tài)轉(zhuǎn)移向四個(gè)方向移動(dòng)如果新位置是‘F’則count1否則count不變。終止條件當(dāng)count K時(shí)記錄當(dāng)前步數(shù)此時(shí)BFS首次到達(dá)該狀態(tài)的步數(shù)就是最短路徑。去重訪問(wèn)過(guò)的狀態(tài)(x, y, count)需要記錄避免重復(fù)入隊(duì)。這里我用了三維列表visited[x][y][count]來(lái)標(biāo)記。from collections import deque def bfs(grid, K, start): m, n len(grid), len(grid[0]) # 找到起點(diǎn)S for i in range(m): for j in range(n): if grid[i][j] S: sx, sy i, j # visited[i][j][c] 表示在(i,j)位置且已收集c個(gè)美食點(diǎn)的狀態(tài)是否已訪問(wèn) visited [[[False]*(K1) for _ in range(n)] for _ in range(m)] q deque() q.append((sx, sy, 0, 0)) # (x, y, count, steps) visited[sx][sy][0] True dirs [(0,1),(0,-1),(1,0),(-1,0)] while q: x, y, cnt, steps q.popleft() if cnt K: return steps for dx, dy in dirs: nx, ny xdx, ydy if 0nxm and 0nyn and grid[nx][ny] ! #: new_cnt cnt if grid[nx][ny] F: new_cnt cnt 1 if new_cnt K: # 超過(guò)K個(gè)按K個(gè)算壓縮狀態(tài)空間 new_cnt K if not visited[nx][ny][new_cnt]: visited[nx][ny][new_cnt] True q.append((nx, ny, new_cnt, steps1)) return -1 # 如果無(wú)法收集到K個(gè)美食點(diǎn)踩坑點(diǎn)visited數(shù)組的第三維大小設(shè)為K1就夠了因?yàn)楫?dāng)收集數(shù)量大于等于K時(shí)目標(biāo)就已達(dá)成可以統(tǒng)一視為K這樣能大幅減少狀態(tài)數(shù)避免內(nèi)存超限。這是BFS解決帶約束路徑問(wèn)題的常用技巧。第四題動(dòng)態(tài)規(guī)劃DP—— “最優(yōu)分配”題目大意有n個(gè)任務(wù)和m個(gè)資源單位每個(gè)任務(wù)需要消耗一定資源并產(chǎn)生一定價(jià)值求在資源限制下的最大總價(jià)值。這是一個(gè)經(jīng)典的0-1背包問(wèn)題變種。 我的解題步驟立刻識(shí)別出是背包問(wèn)題。資源總量m就是背包容量每個(gè)任務(wù)的任務(wù)消耗cost[i]是物品重量?jī)r(jià)值value[i]是物品價(jià)值。定義DP數(shù)組dp[j]表示使用恰好j單位資源時(shí)能獲得的最大價(jià)值。初始化dp[0]0其余為負(fù)無(wú)窮因?yàn)橐蟆扒『谩笔褂玫绢}通常求不超過(guò)m的最大值初始化0即可。狀態(tài)轉(zhuǎn)移對(duì)于每個(gè)任務(wù)i倒序遍歷j從m到cost[i]dp[j] max(dp[j], dp[j - cost[i]] value[i])。最終答案max(dp)。n, m map(int, input().split()) cost [] value [] for _ in range(n): c, v map(int, input().split()) cost.append(c) value.append(v) dp [0] * (m 1) for i in range(n): for j in range(m, cost[i] - 1, -1): dp[j] max(dp[j], dp[j - cost[i]] value[i]) print(max(dp))心得DP題最關(guān)鍵的是準(zhǔn)確定義狀態(tài)和寫(xiě)出轉(zhuǎn)移方程。在考場(chǎng)上如果一時(shí)想不出最優(yōu)的DP定義可以先寫(xiě)一個(gè)記憶化搜索DFS緩存這往往更直觀也能拿到不少分然后再有時(shí)間可以嘗試優(yōu)化成遞推DP。2.3 進(jìn)階題優(yōu)化與剪枝的“試金石”這幾題需要更優(yōu)的算法才能通過(guò)全部測(cè)試用例。第五題二分查找 貪心驗(yàn)證題目通常描述為將一個(gè)數(shù)組分成連續(xù)的K段每段有一個(gè)權(quán)重如最大值、和值要求最小化所有段權(quán)重的最大值。這類(lèi)問(wèn)題被稱(chēng)為“最小化最大值問(wèn)題”標(biāo)準(zhǔn)解法是二分答案。 解題框架二分答案答案即最大段權(quán)重肯定在數(shù)組最大值和數(shù)組總和之間。在這個(gè)范圍內(nèi)進(jìn)行二分查找。貪心驗(yàn)證給定一個(gè)候選答案mid判斷能否將數(shù)組分成不超過(guò)K段且每段的權(quán)重不超過(guò)mid。驗(yàn)證方法是從頭開(kāi)始累加一旦當(dāng)前段權(quán)重超過(guò)mid就新開(kāi)一段。如果需要的段數(shù)小于等于K則mid可行否則不可行。更新邊界如果mid可行說(shuō)明答案可以更小或等于mid令right mid如果不可行說(shuō)明答案必須更大令left mid 1。def can_split(nums, K, limit): 判斷在每段和不超過(guò)limit的情況下能否將nums分成K段 count 1 # 當(dāng)前段數(shù) current_sum 0 for num in nums: if current_sum num limit: count 1 current_sum num if count K: # 段數(shù)已超 return False else: current_sum num return True def solve(nums, K): left, right max(nums), sum(nums) while left right: mid (left right) // 2 if can_split(nums, K, mid): right mid else: left mid 1 return left核心技巧二分查找的循環(huán)條件是while left right更新時(shí)right mid和left mid 1要配對(duì)這樣可以保證最終left就是答案且不會(huì)死循環(huán)。這是二分查找一個(gè)非常經(jīng)典的寫(xiě)法。第六題數(shù)論與規(guī)律查找藍(lán)橋杯常考GCD最大公約數(shù)、LCM最小公倍數(shù)、質(zhì)因數(shù)分解、同余等知識(shí)。今年的題涉及一個(gè)數(shù)列的構(gòu)造和查詢(xún)。對(duì)于這類(lèi)題如果數(shù)據(jù)規(guī)模很大直接模擬必超時(shí)。我的策略是先寫(xiě)一個(gè)暴力程序生成小規(guī)模的數(shù)據(jù)比如n20。觀察輸出結(jié)果尋找規(guī)律??赡苄枰蛴〕鰯?shù)列的前若干項(xiàng)或者計(jì)算某些特定項(xiàng)的值。將找到的規(guī)律用數(shù)學(xué)公式或遞推式表達(dá)出來(lái)。用這個(gè)公式來(lái)編寫(xiě)高效的程序。例如題目可能是定義數(shù)列 a[n] a[n-1] n * (某個(gè)與n互質(zhì)的函數(shù))然后問(wèn)第N項(xiàng)的值。通過(guò)暴力打表你可能會(huì)發(fā)現(xiàn) a[n] 其實(shí)是 n*(n1)/2 的某個(gè)倍數(shù)或者與平方和有關(guān)。一旦找到規(guī)律代碼就變得非常簡(jiǎn)單。考場(chǎng)上我在這類(lèi)題上花了較多時(shí)間觀察但一旦規(guī)律找到編碼就很快。2.4 壓軸題綜合能力的“競(jìng)技場(chǎng)”最后兩題通常綜合了多種算法或者數(shù)據(jù)結(jié)構(gòu)要求較高。第七題復(fù)雜模擬 數(shù)據(jù)結(jié)構(gòu)優(yōu)化題目描述了一個(gè)稍復(fù)雜的規(guī)則需要對(duì)一組數(shù)據(jù)進(jìn)行多輪操作。直接按照題意模擬在數(shù)據(jù)量大的情況下可能會(huì)超時(shí)。這里需要分析每次操作的本質(zhì)并用合適的數(shù)據(jù)結(jié)構(gòu)來(lái)加速。 常見(jiàn)優(yōu)化手段區(qū)間更新與查詢(xún)?nèi)绻婕皩?duì)數(shù)組某個(gè)區(qū)間所有元素加一個(gè)值然后查詢(xún)考慮使用差分?jǐn)?shù)組。差分?jǐn)?shù)組能在O(1)時(shí)間內(nèi)完成區(qū)間加減最后再通過(guò)前綴和還原原數(shù)組。頻繁查找最值如果需要?jiǎng)討B(tài)維護(hù)一個(gè)集合的最大值/最小值并支持添加刪除Python的heapq小頂堆是利器。如果需要同時(shí)維護(hù)最大最小可以考慮使用兩個(gè)堆或者使用SortedList但藍(lán)橋杯環(huán)境可能沒(méi)有sortedcontainers庫(kù)需謹(jǐn)慎。集合與映射關(guān)系大量使用in操作時(shí)用set或dict代替list。我在一道題中遇到了需要維護(hù)一個(gè)動(dòng)態(tài)列表并頻繁刪除中間元素的情況。使用list的pop(i)操作是O(n)的會(huì)超時(shí)。解決方案是采用“懶惰刪除”策略用一個(gè)布爾數(shù)組deleted標(biāo)記元素是否被刪除實(shí)際并不從列表中移除。只有當(dāng)被刪除元素積累到一定程度比如超過(guò)一半或者它位于我們關(guān)心的位置時(shí)才進(jìn)行一次集中的清理。這本質(zhì)是一種用空間換時(shí)間的權(quán)衡。第八題高級(jí)圖論或狀態(tài)壓縮DP這是拉開(kāi)差距的題目。我這次遇到的是一個(gè)狀態(tài)壓縮DP狀壓DP的變種。題目涉及選擇若干個(gè)節(jié)點(diǎn)滿(mǎn)足某些約束求最優(yōu)解。當(dāng)節(jié)點(diǎn)數(shù)N在20以?xún)?nèi)時(shí)就要考慮狀壓DP了。 狀壓DP的核心是用一個(gè)整數(shù)的二進(jìn)制位來(lái)表示一個(gè)集合。例如mask 13 (二進(jìn)制1101)表示選擇了第0、2、3號(hào)節(jié)點(diǎn)從右往左數(shù)。 解題步驟定義狀態(tài)dp[mask]表示當(dāng)選擇的節(jié)點(diǎn)集合為mask時(shí)所能得到的某種最優(yōu)值如最大收益、最小成本。狀態(tài)轉(zhuǎn)移通常從已知狀態(tài)dp[mask]出發(fā)嘗試添加一個(gè)不在mask中的節(jié)點(diǎn)i形成新?tīng)顟B(tài)new_mask mask | (1i)并更新dp[new_mask]。轉(zhuǎn)移時(shí)需要檢查添加節(jié)點(diǎn)i是否合法是否與mask中的節(jié)點(diǎn)沖突等。初始化與答案dp[0]通常有確定值如0。最終答案在所有可能的mask中取最優(yōu)。n 10 # 假設(shè)有10個(gè)節(jié)點(diǎn) dp [-float(inf)] * (1 n) dp[0] 0 # 初始化一個(gè)都不選時(shí)收益為0 # 預(yù)處理一些信息比如每個(gè)節(jié)點(diǎn)的價(jià)值val[i]或者節(jié)點(diǎn)間的沖突關(guān)系conflict[i][j] for mask in range(1 n): if dp[mask] 0: # 無(wú)效狀態(tài) continue for i in range(n): if mask (1 i): # 節(jié)點(diǎn)i已在集合中 continue # 檢查合法性例如節(jié)點(diǎn)i是否與mask中所有節(jié)點(diǎn)都不沖突 ok True for j in range(n): if mask (1 j) and conflict[i][j]: ok False break if ok: new_mask mask | (1 i) dp[new_mask] max(dp[new_mask], dp[mask] val[i]) ans max(dp) # 最終答案難點(diǎn)狀壓DP的難點(diǎn)在于狀態(tài)設(shè)計(jì)和轉(zhuǎn)移條件的梳理。在考場(chǎng)上如果時(shí)間不夠可以嘗試用DFS剪枝來(lái)求解小規(guī)模數(shù)據(jù)拿到部分分?jǐn)?shù)。對(duì)于這題我由于時(shí)間關(guān)系只完成了狀態(tài)設(shè)計(jì)和基礎(chǔ)轉(zhuǎn)移一些復(fù)雜的約束條件沒(méi)來(lái)得及完全處理估計(jì)丟了不少分。3. 考場(chǎng)時(shí)間分配與策略復(fù)盤(pán)拿到78分除了題目本身的理解和編碼時(shí)間分配策略至關(guān)重要。下面是我的時(shí)間分配復(fù)盤(pán)供大家參考0-30分鐘快速通讀所有題目標(biāo)記出難度。通常A~D是基礎(chǔ)題E~G是中等題H~J是難題。我首先用15~20分鐘把A~D題全部AC建立信心保證基礎(chǔ)分拿穩(wěn)。30-90分鐘主攻E~G題。這部分是得分的關(guān)鍵。每道題思考時(shí)間控制在10-15分鐘。如果10分鐘內(nèi)沒(méi)有清晰思路先寫(xiě)一個(gè)暴力解法DFS、枚舉提交確保拿到部分分然后做標(biāo)記繼續(xù)下一題。我在“校園美食家”搜索題上花了較多時(shí)間調(diào)試BFS的狀態(tài)維度用了約25分鐘。90-150分鐘集中精力攻克H、I題。這時(shí)要有所取舍。我判斷I題狀壓DP我更有把握于是先攻I題?;?0分鐘推導(dǎo)狀態(tài)和轉(zhuǎn)移方程并寫(xiě)出了主要框架。J題通常最難則直接寫(xiě)了一個(gè)最樸素的暴力程序能過(guò)多少樣例算多少。最后30分鐘不再開(kāi)新題。做三件事1) 檢查所有已提交題目的代碼有無(wú)明顯的低級(jí)錯(cuò)誤如數(shù)組越界、變量名寫(xiě)錯(cuò)。2) 回過(guò)頭看那些只拿了部分分的題思考優(yōu)化方法嘗試改進(jìn)。3) 確保所有題目的文件輸入輸出格式正確藍(lán)橋杯是OJ形式但有時(shí)需要input()讀取。血淚教訓(xùn)永遠(yuǎn)不要在一道題上卡死超過(guò)30分鐘。藍(lán)橋杯是積分制5道題各拿80%的分比4道題AC而1道題0分要?jiǎng)澦愕枚?。先保證廣度再追求深度。4. Python備賽技巧與環(huán)境配置工欲善其事必先利其器。Python選手在備賽時(shí)除了刷題還有一些環(huán)境和技術(shù)上的細(xì)節(jié)要注意。4.1 常用模板與代碼片段在比賽開(kāi)始前我會(huì)在編輯器中準(zhǔn)備好一些常用模板節(jié)省時(shí)間快速輸入對(duì)于大量數(shù)據(jù)輸入使用sys.stdin.read().split()比循環(huán)調(diào)用input()快得多。import sys data sys.stdin.read().split() # 然后按需轉(zhuǎn)換為int等類(lèi)型遞歸深度與棧DFS遞歸深了可能爆棧可以設(shè)置遞歸深度或使用迭代棧。import sys sys.setrecursionlimit(1000000) # 設(shè)置遞歸深度無(wú)窮大定義INF float(inf)或INF 10**18。方向數(shù)組dirs [(0,1),(1,0),(0,-1),(-1,0)]用于二維網(wǎng)格的上下左右移動(dòng)。4.2 調(diào)試與測(cè)試技巧藍(lán)橋杯比賽時(shí)沒(méi)有本地判題機(jī)但提供樣例。如何高效利用樣例完全復(fù)現(xiàn)樣例首先確保你的程序能完全通過(guò)題目給出的樣例。不僅要結(jié)果對(duì)如果題目要求輸出格式如空格、換行也要一模一樣。設(shè)計(jì)邊界測(cè)試思考輸入的極限情況。例如數(shù)組為空n0、所有元素相同、數(shù)字極大/極小等。在腦子里模擬運(yùn)行或者用代碼簡(jiǎn)單生成測(cè)試。對(duì)拍如果時(shí)間允許對(duì)于不確定的題可以寫(xiě)一個(gè)絕對(duì)正確但很慢的暴力程序brute_force.py和你的優(yōu)化程序solve.py進(jìn)行隨機(jī)輸入對(duì)比。這在平時(shí)練習(xí)時(shí)是發(fā)現(xiàn)邏輯錯(cuò)誤的神器。4.3 Python性能優(yōu)化淺談Python慢是共識(shí)但在算法競(jìng)賽中通過(guò)一些技巧可以規(guī)避大部分性能問(wèn)題避免全局變量在函數(shù)內(nèi)部訪問(wèn)局部變量比訪問(wèn)全局變量快。盡量將主邏輯封裝在solve()函數(shù)內(nèi)。使用list代替deque當(dāng)隊(duì)列操作非常頻繁且簡(jiǎn)單時(shí)用list和兩個(gè)指針模擬隊(duì)列可能比collections.deque更快但deque在從兩端增刪時(shí)更通用。減少函數(shù)調(diào)用在深度循環(huán)中頻繁調(diào)用自定義函數(shù)或len()、range()會(huì)有開(kāi)銷(xiāo)??梢允孪葘en(arr)存入變量或者將簡(jiǎn)單的函數(shù)邏輯內(nèi)聯(lián)。使用PyPy3提交藍(lán)橋杯環(huán)境通常提供Python3和PyPy3解釋器。PyPy3對(duì)純Python代碼有極佳的JIT優(yōu)化尤其是循環(huán)密集型的程序速度可能提升數(shù)倍。如果題目沒(méi)有明確要求使用特定解釋器無(wú)腦選PyPy3。我的大部分提交都是用的PyPy3。5. 從省賽到國(guó)賽的備賽建議對(duì)于已經(jīng)拿下省賽并瞄準(zhǔn)國(guó)賽的同學(xué)接下來(lái)的訓(xùn)練需要更有針對(duì)性。5.1 知識(shí)體系查漏補(bǔ)缺根據(jù)省賽暴露的弱點(diǎn)重點(diǎn)加強(qiáng)。如果動(dòng)態(tài)規(guī)劃薄弱就專(zhuān)項(xiàng)練習(xí)線性DP、區(qū)間DP、樹(shù)形DP、狀壓DP的經(jīng)典模型背包、LIS、LCS、編輯距離、石子合并等。如果圖論題發(fā)怵就刷最短路Dijkstra, SPFA、最小生成樹(shù)Kruskal, Prim、拓?fù)渑判?、網(wǎng)絡(luò)流基礎(chǔ)的題目。5.2 進(jìn)行限時(shí)模擬賽找歷年國(guó)賽真題或高質(zhì)量模擬賽嚴(yán)格按照4小時(shí)的時(shí)間進(jìn)行全真模擬。訓(xùn)練自己在高壓下的讀題、構(gòu)思、編碼、調(diào)試能力。賽后不僅要看錯(cuò)題更要復(fù)盤(pán)時(shí)間分配是否合理哪道題浪費(fèi)了時(shí)間哪道題應(yīng)該更早放棄。5.3 學(xué)習(xí)優(yōu)秀題解與代碼在藍(lán)橋杯官網(wǎng)、各大OJ平臺(tái)或社區(qū)如CSDN、知乎上尋找高分選手的題解。重點(diǎn)看他們的思路分析和代碼實(shí)現(xiàn)技巧。同樣一道題別人的代碼可能更簡(jiǎn)潔、更高效。學(xué)習(xí)他們是如何定義狀態(tài)的如何設(shè)計(jì)循環(huán)的用了哪些Python特有的技巧如列表推導(dǎo)式、itertools庫(kù)等。5.4 保持手感與心態(tài)考前一周每天保持一定量的刷題但強(qiáng)度不宜過(guò)大主要是維持手感。復(fù)習(xí)常用模板和易錯(cuò)點(diǎn)。比賽時(shí)的心態(tài)至關(guān)重要遇到難題不要慌相信自己的訓(xùn)練成果按照既定策略能拿一分是一分。記住藍(lán)橋杯的排名不僅取決于你解決了多少難題更取決于你在所有題目上的總得分穩(wěn)扎穩(wěn)打才是王道。這次省賽78分算是一個(gè)對(duì)自己階段性學(xué)習(xí)的肯定也看到了在復(fù)雜DP和優(yōu)化技巧上的不足。編程競(jìng)賽就像爬山每一步都算數(shù)。把每次比賽暴露的問(wèn)題當(dāng)成進(jìn)步的階梯持續(xù)練習(xí)和總結(jié)國(guó)賽場(chǎng)上定能有更好的發(fā)揮。最后分享一個(gè)我自己的小習(xí)慣每次寫(xiě)完一道題的代碼即使樣例過(guò)了也會(huì)在心里快速過(guò)一遍幾個(gè)關(guān)鍵的邊界條件這個(gè)“心理測(cè)試”幫我避免了好幾次粗心導(dǎo)致的提交錯(cuò)誤。

相關(guān)新聞

Gemini 1.5 Flash長(zhǎng)上下文模型實(shí)戰(zhàn):從成本解析到代碼庫(kù)、文檔分析應(yīng)用

Gemini 1.5 Flash長(zhǎng)上下文模型實(shí)戰(zhàn):從成本解析到代碼庫(kù)、文檔分析應(yīng)用

1. 從“1塊8讀完三體”說(shuō)起:我們到底在期待什么? 最近,谷歌AI扔下了一顆“性?xún)r(jià)比”炸彈,標(biāo)題黨們紛紛打出了“1塊8讀完3本《三體》”的噱頭。這個(gè)數(shù)字乍一看確實(shí)抓人眼球,但作為一個(gè)在AI應(yīng)用和成本優(yōu)化上折騰了多年的老…

2026/8/2 12:05:39 閱讀更多
1.54英寸OLED模塊驅(qū)動(dòng)全攻略:從硬件選型到ESP32/STM32實(shí)戰(zhàn)應(yīng)用

1.54英寸OLED模塊驅(qū)動(dòng)全攻略:從硬件選型到ESP32/STM32實(shí)戰(zhàn)應(yīng)用

1. 項(xiàng)目概述:1.54英寸OLED模塊的入門(mén)與核心價(jià)值如果你正在尋找一塊尺寸適中、顯示效果驚艷、又足夠省電的屏幕來(lái)為你的嵌入式項(xiàng)目“點(diǎn)睛”,那么1.54英寸的OLED模塊絕對(duì)是一個(gè)繞不開(kāi)的明星選手。我手頭這塊模塊,分辨率通常是128x64或240x240&a…

2026/8/2 12:05:39 閱讀更多
Python爬蟲(chóng)與數(shù)據(jù)分析實(shí)戰(zhàn):從零基礎(chǔ)到項(xiàng)目應(yīng)用的全棧學(xué)習(xí)指南

Python爬蟲(chóng)與數(shù)據(jù)分析實(shí)戰(zhàn):從零基礎(chǔ)到項(xiàng)目應(yīng)用的全棧學(xué)習(xí)指南

這次我們來(lái)看一套被B站技術(shù)區(qū)廣泛推薦的Python自學(xué)教程。這套教程號(hào)稱(chēng)“2026最細(xì)”,主打從零基礎(chǔ)到實(shí)戰(zhàn)應(yīng)用,核心覆蓋Python基礎(chǔ)、爬蟲(chóng)和數(shù)據(jù)分析三大模塊。如果你正在尋找一套系統(tǒng)性強(qiáng)、實(shí)戰(zhàn)案例多、能快速上手的Python學(xué)習(xí)資源,這篇文章會(huì)幫…

2026/8/2 13:36:10 閱讀更多
基于Seeed Studio XIAO RP2350的MicroPython嵌入式開(kāi)發(fā)實(shí)戰(zhàn)指南

基于Seeed Studio XIAO RP2350的MicroPython嵌入式開(kāi)發(fā)實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:當(dāng)RP2350遇上MicroPython如果你手頭有一塊Seeed Studio XIAO RP2350開(kāi)發(fā)板,正琢磨著怎么讓它快速動(dòng)起來(lái),而不是一頭扎進(jìn)復(fù)雜的C/C編譯環(huán)境里,那么MicroPython絕對(duì)是你應(yīng)該優(yōu)先考慮的選擇。我最近花了不少時(shí)間把玩這塊…

2026/8/2 13:36:10 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多