有用的 trick 集合
有些时候这些神秘的 trick 可能会帮助你在考场上快速想出一些东西,所以需要记录一下。
数学类
Lucas 定理在 \(\text{mod}\ 2\) 意义下的结论
\(\binom{n}{m}\equiv1\pmod 2\) 当且仅当 \(n \operatorname{and} m=m\),其中 \(\operatorname{and}\) 表示按位与运算。换句话说就是 \(m\) 的二进制位必须是 \(n\) 的二进制位的子集。
应用:P14654 夤生月。
面对计数容易算重
考虑枚举基准点将整个东西分成两部分分析,然后乘法原理。
实际上这种问题并没有什么固定的思维,只是发现可以用。
数据结构类
正则括号序列的转化
可以考虑一个正则括号序列转变成一棵树,然后在树上搞事情。
具体转化就是用一个栈维护左括号,每遇到一个左括号就把它加入当前节点的儿子里,否则弹栈。
Code
top = 0;
stk[++ top] = 1;
for (char ch : s) {
if (ch == '(') {
int u = stk[top];
++ tot;
g[0][u].eb (tot);
g[0][tot].eb (u);
stk[++ top] = tot;
}
if (ch == ')') -- top;
}
应用:CF2210D A Simple RBS Problem。
求区间前缀最大值个数
线段树维护单调栈。文章。
模板:P4198 楼房重建。
区间的神秘操作
如果遇到区间要维护一些非常反人类的操作,请认准分块。(前提是数据允许)
图论类
无向图上搞猎奇事情
考虑无向图是一棵生成树上面添了许多条边组成的图,然后就从树+环考虑。
不知道什么类
排列的区间 mex
对于一个排列 \(\{a_n\}\),其区间 \([l,r]\) 的 \(\text{mex}\) 等于 \([1,l)\) 和 \((r,n]\) 内元素的的最小值。文字语言就是排列的区间 \(\text{mex}\) 等于补集 \(\min\)。
应用:P15652 [省选联考 2026] 排列游戏 / perm。
求一个数 \(a=\min\{S\}\) 或 \(a=\max\{S\}\) 的计数和求其他的
考虑枚举 \(a\) 以去掉 \(\min\) 或 \(\max\)。相当于是将计算未知变成计算已知,显然这样更好处理。
应用:ABC439D Kadomatsu Subsequence。
图上删边等极难维护之类
考虑时光倒流(正难则反),让删边变成加边这样好操作的东西。
应用:一大堆,但我目前还没做到题目。
不会做题
睡一觉吧。

浙公网安备 33010602011771号