目次

  1. 語法
    C++基礎語法: C++學習筆記
    Python基礎語法: Python學習筆記

  2. 窮舉
    邊權只有0跟1: 01BFS
    每種路徑求法: DFS
    DFS加速: 剪枝
    計算所有子集合的合: All sum of subset

  3. 資料結構(data structure)
    區間求值: Segment Tree
    求區間最值: Sparse Table
    計算前綴合: BIT
    二維前綴合: 二維前綴和
    集合合併問題: Disjoint Set
    用於優先對列: Heap
    滑動窗口問題: 單調隊列
    分成√塊: 分塊演算法
    分塊延伸: 莫隊算法
    區間第

    k小: 持久化線段樹
    區間第
    k
    小二分搜作法: 整體二分
    尋找子字串: Suffix Array
    區間不同數的個數: Range Distinct values queries
    斜線求最小
    f(x)
    : 李超線段樹
    BST平衡樹: Treap


  4. 兩點最短路徑求法: Shortest Path
    最少點圍成的區域包含所有點: convex hull
    兩兩相配最大匹配數: 匈牙利演算法
    求兩兩有路徑相通的圖: SCC
    任兩點都相通: Eulerian Cycle
    網路流問題: flow
    兩條件必要有一條建成立問題: 2-SAT

    xa1+ya2+za3=k: 同餘最短路


  5. 樹的遍歷: 前序 後序 中序 遍歷
    一筆走完權重問題(最小生成數):MST
    求最近共同祖先: LCA

  6. 數論
    費馬小定理與歐拉定理:數論
    求最大的平均值: 最大化平均值
    數值太大卻要開陣列存時: 離散化
    把元素對應到特定的元素: Hash Table
    幾人一數淘汰,求倖存者問題: 約瑟夫問題
    快速求出

    ab: 快速冪
    求出費式數列極大值: 矩陣快速冪
    大數相乘取模: 快速乘
    i<j && s[i]>s[j]
    的數對: 逆序數對
    最大公因數與最小公倍數: GCD&LCM
    組合數
    C
    幾取幾: Combination
    質數: Prime

  7. DP
    DP經典問題: DP
    求最大連續元素和: MCS
    求最長遞增子序列: lIS
    求最長共同子序列: LCS
    求最長回文子字串: LPS
    矩陣鏈相乘: matrix chain
    括號匹配數: N個括號的匹配數

    a[i]×b[j]+c[j]的狀態轉移: 斜率優化

  8. 其他
    最常回文子字串: LPS
    犯蠢紀錄: debug
    日期轉換: 時間函數庫
    github使用教學: Github push 使用教學

小技巧:

  1. 0,1字串在轉INT時可以直接用(s[i] & 1)
  2. 陣列初始成最大值時可以使用memset(a,0x3f,sizeof(a)),會自動偵測int or ll,且相加不會overflow
  3. iota(dsu,dsu+N,0) 會從0填到N-1
  4. 做unsigned long long運算會自動mod 263且不會溢位