C++ 核心概念深度解析:虛函數與虛繼承的本質區別
前言 在 C++ 面向對象編程中,虛函數與虛繼承是兩個容易混淆但本質完全不同的核心機制。前者支撐運行時多態,後者解決菱形繼承中的數據冗餘與二義性問題。本文將通過
Smith-Waterman 算法 OpenMP + MPI 混合並行實現詳解
背景 Smith-Waterman (SW) 為局部序列比對經典動態規劃算法,時間複雜度 O(mn),對長序列極其耗時。本文展示基於反對角線波前並行的 Open
HDU 2062 子集序列:組合數學與字典序第 m 個排列子集構造
題目大意 集合 {1,2,...,n} 的所有非空子集,按「先按大小遞增,同大小按字典序」排序。求第 m 個子集的元素列表。 例 n=2:{1}, {1,2},
LeetCode Wildcard Matching:線性時間雙指針算法詳解
問題描述 實現支持 ?(匹配任意單字符)和 *(匹配任意序列,含空)的通配符匹配。 算法核心思想 雙指針 + 回溯記錄。關鍵觀察: * 可匹配 0
英文數字轉中文大寫:Flex/Bison 詞法語法分析實現
項目概述 使用 Flex(詞法分析)+ Bison(語法分析)構建編譯器前端,將英文數字字串(如 one hundred twenty-three)解析為數值,
HDU 1466 直線交點數計數:動態規劃與組合數學經典題解
題目大意 平面上有 n (≤20) 條直線,無三線共點。這些直線可能的交點數有哪些?按遞增輸出所有可能值。 例:n=2 → 0 1(平行或相交);n=3 → 0
Timus 1002 Phone Numbers - Trie + DP + 回溯剪枝
題目大意 電話號碼按鍵映射(2:ABC, 3:DEF...)。給定字典單詞,將號碼轉換為單詞序列(單詞對應的數字串拼接等於號碼),要求單詞數最少(即總長度最短,
HDU 1804 Deli Deli - 英文複數變換規則實現
題目大意 給定 L 個不規則單數/複數對照表,及 N 個單數單詞。按規則轉換為複數: 1. 在不規則表中 → 直接替換。 2. 以輔音字母 + y 結尾 → y
Light OJ 1334 Genes in DNA:KMP + DP 解決子串前後綴組合計數
問題分析 給定文本串 S 和模式串 P。P 的所有非空真前綴與非空真後綴組成 (n-1)² 個組合串。求 S 中有多少子串等於某個組合串(一個子串可對應多個組合
HDU 1701 ACMer - 浮點數精度陷阱與整數化解法
題目大意 已知 ACMer 佔比在 P% 到 Q% 之間(含端點),P,Q 保留兩位小數。求學生總數最小值。 即找最小正整數 m,使存在整數 k 滿足 P/10
HDU 1162 Eddy's Picture - Prim 最小生成樹模板題
題目大意 給定 n 個點座標,邊權為歐氏距離。求連通所有點的最小總邊長(MST)。多測試案例,n ≤ 100。 Prim 算法 O(n²) 實現 預計算距離
HDU 2049 組合數學:錯排公式與組合數應用
題目大意 N 對新人,新郎隨機找新娘。恰好 M 個新郎找錯的情況數。多測試案例,N ≤ 20。 數學模型 選出 M 個找錯的新郎:C(N, M) 種。 這
C++ Primer 學習筆記:特殊工具與技術 — 優化內存分配
引言 標準庫容器預設使用 std::allocator,通用但非極致優化。對於高頻、小塊、固定大小的內存分配(如節點型容器),自定義分配器可顯著提升效能。 核
ZOJ 3790 Consecutive Blocks - 離散化 + 滑動窗口模擬
題目大意 長度 n 的整數序列,可刪除 ≤ k 個數。求刪除後,某種數值連續出現的最大長度。 解法:離散化 + 分組雙指針 將數值離散化映射為 1..tot
ZOJ 3794 Greedy Driver - 雙向 SPFA 求最大獲利
題目大意 有向圖,起點 1 油箱滿(容量 K),終點 n。邊有耗油量。部分節點有免費加油站(到達即滿油),部分節點可賣油(任意量,單價給定)。求到達終點能獲得的
C++ 基於 Policy 的模板編程:靈活組合行為與結構
什麼是 Policy-Based Design? Policy(策略)是一個定義特定介面(型別、成員函數、成員變數)的類別模板。宿主類別透過模板模板參數接受多個