Loading

tricks

  • 对于一些操作类的计数问题,可以考虑操作到无法操作之后对不满足条件的剩余情况进行计数。

  • 遇到不会的计数或不会优化的 dp,可以考虑容斥。

  • 容斥复杂度太高时,可以考虑将情况划分为等价类。

  • 对于树的 constructive,考虑从叶子开始。

  • \(\dbinom{n}{\lfloor \frac{n}{2} \rfloor}\)

  • 树上高斯消元 \(\mathcal{O}(n)\) 做法。

  • 优化 dp 时,可以考虑真正有用的限制是什么,对于用处不大的内容,可以考虑压掉(如 CF1750F)。

  • 可以考虑使用连边刻画构造的限制。

  • 对于难以优化的 dp,若贡献关于二进制每一位独立,可以考虑将二进位制拆成两部分,进行 meet in the middle 式的转移,将复杂度中 \(V\) 变为 \(\sqrt V\)

  • 对于难以入手的神秘题,大多具有良好性质。在无法发现性质时,可以通过增加约束条件或寻找必要条件或打表等方式猜结论。

  • 对于询问出现偶数次的元素,考虑随机赋权维护异或和。

  • 对于排列求逆的操作,可以考虑将 \((i, p_i)\) 视作二元组,求逆即为 \(\operatorname{swap}(i, p_i)\)

  • 颜色段均摊。

  • 扫描线维护矩形面积并:对于 SGT 每一个节点维护 \(cover_i\) 表示完整覆盖该节点对应区间的区间个数,\(cover\) 不下传,若 \(cover_i > 0\) 则贡献为 \(r - l + 1\),否则需要 push_up。

  • 对求第 \(k\) 大的题,若是多个序列并起来的第 \(k\) 大,且满足某种单调性,可以考虑二分答案 + 双指针。

  • 区间数颜色:维护 \(lst\)

  • 数论很神奇。

  • 不要忘记差分约束。

  • 最大流最小割定理。

  • 从值域考虑,将 \(> v\) 的数视为 \(1\)\(\le v\) 的数视为 \(0\)

  • 对于强制在线且修改需要重构的题(如维护 AC 自动机),可以考虑二进制分组,维护大小为 \(2 ^ k, 2 ^ {k - 1}, \cdots, 1\) 的数据结构,合并组的时候暴力重构。

  • 对于将字符串相等定义为 \(\exist\) 双射 \(f: \{a, b, \cdots, z\} \to \{a, b, \cdots, z\}\) 满足 \(f(s_i) = t_i\) 的题,考虑使用 \(lst\) 进行判断。

  • 对于查区间 \([l, r]\) 的题,先考虑 \(l = 1, r = n\)

  • 对于灵活度很大的题,要敢于猜答案不会太大。

  • 考虑 DP。

  • Hall 定理推论:\(|S| - \max\limits_{T \subseteq S} (|T| - |N(T)|)\)

  • 李超线段树(合并)。

  • KTT。

  • 单侧递归。

  • 换维扫描线。

  • 对于一个公平组合游戏,操作加上一个直接结束,SG 值变为原来的 SG 值 \(+1\)

posted @ 2025-07-23 10:45  DE_aemmprty  阅读(19)  评论(0)    收藏  举报