自分用のメモです。
WAの時に確認すべきこと
- 問題文は正しく読めているか?
- オーバーフローしていないか?
- 998244353や10^9+7で割った余りを求めるタイプの場合、余りを取っているか?
負の値を足している時、
res = (res % P + P) % P
のようなケアをしているか? - 二分探索をしている時、最小値、最大値に到達できるか?
探索
DFS
木を辿る
BFS
Bit全探索
DP
1次元
2次元
桁DP
タイリング/敷き詰め
- 蟻本 p.p. 177 ドミノ敷き詰め
- アルゴリズムと数学 演習問題集 057 - Domino Tiling 紛らわしい例
ナップザック問題
ぐるぐる遷移していくやつ
区間スケジュール問題
数列/整数
約数
素数
フィボナッチ数列/漸化式
行列演算
- アルゴリズムと数学 演習問題集 049 Fibonacci Easy (mod 1000000007)
- アルゴリズムと数学 演習問題集 054 - Fibonacci Hard (mod 1000000000)
- アルゴリズムと数学 演習問題集 055 - Recurrence Formula 1
- アルゴリズムと数学 演習問題集 056 - Recurrence Formula 1
数列の連続する項目の差の絶対値に注目
幾何
三角形
円の交点
凸性
外積で判定できる
グラフ
二部グラフ判定
DFS
ダイクストラ
ワーシャルフロイド
橋
閉路
LCA
蟻本 pp.292
\(d(u,v)=depth(u)+depth(v)-2depth(lca(u,v))\)
セグメント木
Fenwick Tree
通常のセグメント木
区間和
- いもす法
- アルゴリズムと数学 演習問題集 041
- https://github.com/matsueushi/CompetitiveProgrammingInRust/blob/eab196022fc95a0fe449b7ad21bac8c857f5a440/tessoku-book/src/bin/a08.rs
その他
座標圧縮
括弧
マンハッタン距離
45度回転が有用。
チェスのナイト
斜めに動くとわかりづらいので、座標変換を行う。 $$ \begin{aligned} \left( \begin{matrix} x \\ y \end{matrix} \right) = \left( \begin{matrix} 1 & 2 \\ 2 & 1 \end{matrix} \right) \left( \begin{matrix} s \\ t \end{matrix} \right) \end{aligned} $$ だから、逆変換 $$ \begin{aligned} \left( \begin{matrix} s \\ t \end{matrix} \right) = -\frac{1}{3} \left( \begin{matrix} 1 & -2 \\ -2 & 1 \end{matrix} \right) \left( \begin{matrix} x \\ y \end{matrix} \right) \end{aligned} $$ を考えることにより縦横の単純な移動に変換する。
- 蟻本 pp.353 Endless Knight
- アルゴリズムと数学 演習問題集 052 - Knight