課前自我鍛鍊

先到各大 Online Judge 申請帳號寫題目吧!

舒適的打比賽環境

  • 建置你的開發環境
  • 測試比賽環境指南
  • 點心 x 飲料 x 氣球

預備的預備知識

  • 網路資源
  • 你的好友

資料結構

預備知識

  • 前綴和、差分、二分搜
  • STL 容器
  • 稀疏表(Sparse Table)
  • 基礎分治

課程大綱

  • 基礎線段樹
  • 更多線段樹
  • 使用線段樹
  • 合併線段樹

分塊方法

預備知識

  • 時間複雜度
  • 前綴和、差分、二分搜
  • 基本資料結構 (BIT、線段樹)
  • 國中數學

課程大綱

  • 分塊技巧
  • 莫隊算法
  • 各種根號相關的數學性質
  • 各種根號相關的演算法

動態規劃

預備知識

  • 經典 DP 問題(背包、LCS、LIS)
  • 前綴和

課程大綱

  • 單調隊列優化
  • 斜率優化
  • 1D/1D 凹、凸優化
  • 2D/1D 凹、凸優化
  • 分治優化
  • Aliens 優化
  • SOS dp
  • 連通塊 dp

圖論

預備知識

  • 知道圖是什麼,圖的儲存
  • DFS,BFS
  • 樹,直徑,重心,LCA

課程大綱

  • 樹剖,虛樹
  • BCC, SCC
  • 歐拉迴路
  • 最小生成樹 Kruskal 重構樹
  • 匹配
  • Cycle Basis

非典型題目

預備知識

  • 排列組合與機率的基本概念
  • 基礎資料結構
  • 基礎圖論

課程大綱

  • 互動題
  • Two Steps 與資訊壓縮
  • Output Only 題與 Heuristic
  • 構造程式題

數學

預備知識

  • 高中排列組合
  • 高中微積分
  • 高中矩陣

課程大綱

  • 組合計數
  • 期望值
  • 數論
  • 生成函數
  • 線性代數

組合賽局

預備知識

  • 數學歸納法
  • xor

課程大綱

  • 賽局分類
  • nim、匱乏 nim
  • Sprague–Grundy theorem
  • hackenbush 簡談

隨機方法

預備知識

  • 國中排列組合
  • 高中機率、期望值
  • 基礎演算法知識 (圖論、動態規劃、資料結構)

課程大綱

  • 前言和工具認識
    • Monte Carlo 演算法
      • Hash
      • Abundance of Witnesses
      • Color-coding
      • Random Sampling
    • Las Vegas 演算法
      • Foiling an Adversary
      • Random Reordering
    • 延伸
      • 近似演算法
      • 啟發式演算法
      • 隨機中毒

    分治

    預備知識

    • 基礎的分治法
    • 認真上資料結構課
    • 認真上動態規劃課
    • 淺淺的看過主定理

    課程大綱

    • 無所不在的分治
    • 分治的經典用法
    • 換個角度看分治
    • 分治與競賽程式