小总结
假如 CSP 寄了,这就是死亡回放
没有简单题,不要总是想很快签。
即使是黄也需要想一会,想不出来别慌,再不过先把暴力打出来。
注意打特殊性质的分,复杂度不对也应该接着想,\(\mathbb{T}\) 总比爆零好。
思维题就是想性质、转化,发现不会了再读题想性质,想到性质重新读题转化题意。
先打暴力!!!暴力分有惊喜!!!不读题你永远不知道一个 \(O(2^n)\) 的暴力能拿多少分。
注意暴力优化,可能很简单的优化也能涨分。
经常换换思路,其实有更直接更优的方法,根本没有绕那么远。
别太死。
容易忘的
状压
(数据范围较小时,也可以打部分分。)
连通问题可以压与上一位是否连接。
bitset
同样可以压缩状态,注意一些与二进制有关的性质或者存在性问题。
当然可以优化暴力。
差分
区间(树上问题)区间修改单点查询可以直接用差分,也可以和扫描线结合。
根号
发现不能 log,开始尝试根号,根号重构跑暴力。
相乘如果有上界,那么就能变成根号做。
Trie
即可以处理字符串(可以维护很多信息,如前缀串出现次数),
一般也会和差分结合维护区间异或最大值。
如果需要分治就 trie 合并。
DP
要想到多开几维,然后用一些压维小技巧,如前缀和减去部分和。
图上 dp 转化生成树,断环,处理基环树或仙人掌。
敢于打复杂度高的 dp。别怕麻烦。
线段树
除了一些高级线段树和最简单的维护和,还有区间满足结合律的信息都可以维护。
要看出来线段树维护信息裸题。
势能线段树
发现有一些操作不可重复(比如死),那么一共只有 \(m\) 次操作。暴力维护。
距离
切比雪夫转曼哈顿
处理 max 转 |x|。
所以真的会考吗?oi-wiki
同余
不仅在数学里出现,还可以处理周期问题。
解同余方程时注意信息的隐藏,
信息的隐藏
引用 GGrun 提到的例子,给一条直线 \(y=kx+b\),你能知道它过 \((0,b)\)。
但是反过来,如果你知道一个定点 \((0,b)\) 却不能确定这条直线。
其实就是充分和必要的关系,你在转化的过程中,信息被隐藏了,导致 \((0,b)\) 不具有 \(y=kx+b\) 的所有信息。
这个在频繁的转化问题过程中可能还挺重要的吧,注意转化后一定要是充要条件,才是完全等价。
注意没包含的情况需要分讨。
线段树分治
不知道能不能用上。
将删除操作转为撤销操作,也可以理解成加入补集的操作。
空间一般开不下,但毕竟是 vector
,不会爆零。
注意有时候暴力会更优。(想骗特殊性质,莫名拿了暴力 25,发现直接暴力有 50)。
注意启发式合并 sz
初始化!!!