BZOJ 3823 定情信物:線性篩求乘法逆元計算 n 維立方體元素異或和
題目大意 n 維超立方體中,各維元素 (0維頂點、1維邊、2維面... n-1維胞) 個數分別為多少?求它們的異或和模 p。n ≤ 10^7,p 為質數。 組
循環隊列高效實現:固定記憶體、O(1)操作、隨機訪問
前言 知乎題目:用基本類型實現固定大小隊列,不使用 STL,極致優化時空複雜度。鏈表實現指針開銷大,數組循環隊列是最佳選擇。 設計要點 固定記憶體:構造時一
HDU 1233 還是暢通工程:Prim 算法模板題 (稠密圖 MST)
題目大意 給定 N (<100) 個村莊及兩兩間距離 (共 N(N-1)/2 條邊),求連通所有村莊的最小公路總長度。多測試用例,N=0 結束。提示:輸入量大,
C++ 設計模式:工廠模式從簡單計算器到多態解耦
前言 《大話設計模式》以 C# 為例,本文用 C++ 重走工廠模式演進路徑:從硬編碼 switch → 面向對象封裝 → 簡單工廠 → 工廠方法 → 抽象工廠
BZOJ 1821 部落劃分:Kruskal 算法求最大化最小簇間距離
題目大意 平面 n 個點劃分為 k 群,使群間最近點對距離的最小值最大化。輸出該最大值 (保留兩位小數)。 核心結論 構建完整圖 (邊權 = 歐氏距離),跑
LeetCode 147. 對鏈表進行插入排序:指針操作詳解
題目 對單鏈表使用插入排序,返回排序後的頭結點。 插入排序在鏈表上的優勢 數組插入需移動元素 O(n),鏈表只需修改指針 O(1) 天然適合「已排序部分 +
BZOJ 3238 / AHOI 2013 差異:後綴數組 + 單調棧 計算子串差異值總和
題目大意
給定字串 S (長度 n ≤ 500,000),定義兩個子串的「差異值」為它們最長公共前綴 (LCP) 長度。求所有子串對 (i,j) (i
HDU 1301 Jungle Roads:Prim 算法求最小生成樹經典入門
題目大意 給定 n (≤ 26) 個村莊 (A~Z) 及其間道路維護費用,求連通所有村莊的最小總維護費。多組測試,n=0 結束。邊數 ≤ 75,無重複邊。 P
BZOJ 1821 / JSOI 2010 Group:部落劃分與 Kruskal 重構樹
題目大意 給定平面上 n 個點,需劃分為 k 個集合,使任意兩集合間最近點對距離的最小值最大化。輸出這個最大化後的最小距離(保留兩位小數)。 核心洞見:最小生
POJ 2886 Who Gets the Most Candies?:線段樹單點更新 + 反素數優化
題目大意 N 個小孩圍圈,編號 1~N。第 K 個小孩先出圈,其卡片數字 A 決定下一個出圈者:0 向左數 A 步,A<0 向右數 -A 步。第 p 個出圈者獲
LeetCode 8. 字符串轉整數 (atoi):完整邊界處理與實作
題目 實現 atoi:字符串轉 32 位有號整數。需處理前導空格、正負號、非數字終止、溢出飽和、非法輸入返回 0。 核心邊界條件 情況輸入範例預期輸出 前導
BZOJ 1833 / ZJOI 2010 Count:數位 DP 計算區間數字出現次數
題目大意 給定區間 [l, r],統計 0~9 每個數字在該區間所有整數中出現的總次數。l, r ≤ 10^12。 核心思路:數位 DP + 預處理 狀態定義
LeetCode 142. 環形鏈表 II:快慢指針數學證明與實作
題目 給定單鏈表,若存在環,返回環入口節點;否則返回 null。進階:O(1) 空間解決。 核心數學推導 設: 環外長度 = a 環長度 = r 快慢指針在
LeetCode 144. 二叉樹前序遍歷:遞歸與迭代雙解法
題目 給定一棵二叉樹,返回其節點值的前序遍歷(根 → 左 → 右)。 範例:輸入 {1,#,2,3} (1 的右子為 2,2 的左子為 3),輸出 [1,2,3
C++ 虛函數深度解析:多態實現核心與虛函數表機制
前言 虛函數是 C++ 實現執行期多態的核心機制,被譽為「C++ 的靈魂」。本文從基本概念、虛函數表結構、單繼承/多重繼承下的佈局、安全性風險、析構函數虛化必要
C++ ifstream 開啟中文路徑失敗:原因分析與解決方案
問題重現 在 Windows 平台使用 std::ifstream 以中文路徑開啟檔案時,常遭遇開啟失敗,即使路徑正確無誤。 原因分析 編碼不匹配:Wind
無鎖隊列血案始末(一):起因、代碼對決與 RingQueue 誕生
緣起:一場關於「水貨程序員」的網路論戰 一切始於知乎問題《「怎樣識別水貨程序員」說的是真的嗎?》,延燒至豆瓣討論雲風、陳碩等知名開發者。Sinclair 發帖《