各种 trick 合集

各种 trick……

数据结构常见套路

  1. 去 \(\log\) 的套路:
  2. 可持久化。
  3. 线段树上二分 / 树状数组上倍增。
  4. 处理子树的套路:
  5. 如果信息有区间减法 / 带修改,首选 DFS 序。
  6. 线段树合并。

莫比乌斯反演常见套路

  1. 如果题目的式子跟 \(\gcd\) 有关,优先考虑莫反。
  2. \(\mu * 1 = \epsilon\) 比莫比乌斯反演公式快很多(指推导的时候)。
  3. 如果有枚举约数的,尽量考虑把它提到式子最前面。
  4. 对所有数对的 \(\gcd\) 算一个式子时,考虑枚举 \(\gcd\) 并算它贡献的次数。
  5. 当 \(\gcd(x,y) > 1\) 时,\(\mu(xy) = 0\)。

一些公式

  • \(\sum\limits_{i = 1}^n i = C_{n + 1}^2 = \dfrac {n (n + 1)} 2\)
  • \(\sum\limits_{i = 1}^n i^2 = C_{n + 1}^2 + 2C_{n + 1}^3 = \dfrac {n (n + 1) (2n + 1)} 6\)
  • \(\sum\limits_{i = 1}^n i^3 = C_{n + 1}^2 + 6C_{n + 1}^3 + 6C_{n + 1}^4 = \dfrac {n^2 (n + 1)^2} 4\)

某 border 结论证明

以下设 \(n = |S|\)。

弱周期引理

设 \(p,q\) 为 \(S\) 的周期,\(p + q \le n\),则 \(\gcd(p,q)\) 也是 \(S\) 的周期。

不妨设 \(p > q\),则令 \(d = p - q\)。
对于 \(i - q > 0\),有 \(S_i = S_{i-q} = S_{i+p-q} = S_{i+d}\)。
对于 \(i + p \le n\),有 \(S_i = S_{i+p} = S_{i+p-q} = S_{i+d}\)。
当 \(p + q \le n\) 时不存在 \(i\) 同时不满足以上两者。

引理

\(S\) 的所有长度不小于 \(\frac n2\) 的 border 的长度为一个等差数列。

设 \(p\) 为 \(S\) 的最小周期,不妨设 \(p \le \frac n2\)。
设 \(q\) 为 \(S\) 的一个周期,满足 \(q \le \frac n2\)。
则由弱周期引理可知 \(\gcd(p,q)\) 同为 \(S\) 的周期。
由上可知 \(\gcd(p,q) \ge p\)。
故显然 \(p \mid q\)。

证明

字符串 \(S\) 的所有 border 按长度排序后可以划分为 \(O(\log n)\) 段等差数列。

将 \(S\) 的 border 长度 \(x\) 分类为 \([1,2),[2,4),\dots,[2^{k-1},2^k),[2^k,n)\qquad (2^k \ge \frac n2)\)。

对于 \(x \in [2^k,n)\),由以上引理可得 \(x\) 构成一个等差数列。

对于 \(x \in [2^{i-1},2^i)\):
设 \(m\) 为 \(\max x\),易知剩下的 \(x\) 也为 \(S_{1\dots m}\) 的 border。
而 \(x \ge \frac m2\),故由上引理易知 \(x\) 构成一个等差数列。