有趣的tricks 26.8.25篇
1.下标联想法
见到$i$与$\lfloor \frac{i}{2} \rfloor$作为被操作的元素的下标立刻考虑建造一棵二叉树,考虑树形dp或贪心等
例题:P2606,P4785
2.神秘的括号树
三个相同的连续字符构成一个合法匹配的可以考虑舍去中间的那个,最左边的(第$1$个)视为左括号,最右边的(第$3$个)视作右括号,然后可以发现我们得到了一棵树和他的一个括号序,记每个点的颜色表示其被谁拿走,不难发现树上每个点和其父亲的颜色不同,然后神秘操作一下子就行
*建图跑拓扑也行
例题:CF1427F,P5658
3.异或
$x \xor x$出现在算式中可以直接视作啥都没有
所以可以把一个式子$\xor$上它本身消掉他
4.Trie
实际上,这里的trie树帮我们维护的其实就是位次的关系!
具体的,当我们把一个数插入Trie树时,它走过的路径就是它的二进制表示本身。所以Trie树天然地把所有数按照"从高位到低位"的顺序组织起来了,这也启示了我们对trie树的利用的新方面:维护数的位次顺序
我们就可以开始从高位往低位进行二进制贪心了。可以从0/1的数量来考虑,如果要从数字整体的大小的方面来考虑,那就可以从左右子树的方面来想。具体的,对于trie树的每个分叉,左分叉中的所有数字的数字一定小于右分叉中的所有数字。假如我们要寻找次于某个数的数,我们就可以构造trie数,然后在trie树上找这两个数的分叉处,走过这个分叉接下来所有分叉无脑走最大就行
当然如果让我们找第k大也好说。这是一个动态的过程。因为trie是从左到右逐渐增长,所以一定有一个分支的数的数量小于k,存的是第k-x大的数字。这一部分我们不需要。所以我们只需要记录每个分叉存的数的数量,如果小于k就减掉去搜下一个分支(往右走),如果大于k就往左走,最后就可以搜到了。
总之,我们主要利用的性质有两个
1.位次的关系。Trie天然的把所有数按照从高位到低位的顺序组织了起来,方便进行比较,前缀查询等。
2.大小的关系,左分叉一定小于右分叉。