trick 集合
1. 基础
-
判断是否 \(\forall i\) 有 \(x < a_i\):
-
括号序列:
-
求有多少区间和为 \(0\):
- 令 \(s_i = \sum_{j = 1}^i a_j\),那么区间 \([l, r]\) 和为 \(0\) 即 \(s_r - s_{l - 1} = 0\),也即 \(s_r = s_{l - 1}\)。找满足这样的数对即可。
-
有多少区间和是 \(k\) 的倍数:
-
令 \(s_i = \sum_{j = 1}^i a_j\),那么区间 \([l, r]\) 为 \(k\) 的倍数即 \((s_r - s_{l - 1}) \bmod k = 0\),也即 \(s_r \equiv s_{l - 1} \pmod k\)。再令 \(t_i = s_i \bmod k\),然后找有多少 \(t\) 相同的数对即可。
-
-
给定 \(\{a\}, \{b\}\),求有多少区间 \([l, r]\) 满足 \(\sum_{i = l}^r a_i = \sum_{i = l}^r b_i\)。
-
令 \(c_i = a_i - b_i\),条件变成了 \(\sum_{i = l}^r c_i = 0\)。然后就是上一个的问题。
-
-
判断一个字符串中是否存在回文子串:
- 如果存在 \(s_i = s_{i + 1}\) 或 \(s_i = s_{i + 2}\) 即存在回文子串。否则没有。
- P3413
2. DP
-
转移成环:
-
尝试将 DP 方程展开解方程。
-
3. 图论
4. 数据结构
5. 数学
-
杨辉三角:
- \(\sum_{j = 0}^i (10^{j} \times C_i^j) = 11^i\)。
- 加法方案题解
-
\(\gcd\),当一个数 \(a_x\) 是所有 \(a_i(a_x \in \{a_i\})\) 的约数时:
- \(a_x = \min(a_i) = \gcd (a_i)\)。
- 选拔赛题解
-
方差:
-
\(\dfrac 1n \sum_{i = 1}^n(x_i - \bar x)^2 = \dfrac 1n( \sum_{i = 1}^n x_i^2) - \bar x^2\)。
-
-
预处理 \(i^k\):
-
\(x_1, x_2, \dots, x_k\) 的平均值为 \(\bar x\),与 \(k\) 无关的转化:
6. 其它算法
-
字符串 Hash:
-
启发式合并: