字典树,Trie
字典树是啥捏?字典树详解
模板看这里,或者是这里
字典树与异或:
-
字典树与异或经常有关,可以建一棵\(01Trie\)树,
令树的深度为\(\log_2 Max\),所有要放进字典树里的数都把它们对齐到这么深(小的往前面补零)(eg:最大异或对)(这道题建完树后枚举每个\(a[i]\),将\(a[i]\)在树上跑一遍,每位若可选不同的就选,否则选相同的) -
注意A ^ B ^ A^C =B^C,所以异或其实是可以做各种预处理的。
看这道题。先预处理出根到每个节点的异或和,得到\(n^2\)个异或和,然后就变为上面那个题。 -
前m位相同,第m+1位不同,可用字典树。比如\(a[i]\)的二进制下m+1位为x,则tre[u].son[1^x]起到到底有多少条链,它就会贡献多少。(eg:lowbit求和)
-
注意异或没有同余性,即(A^B)%p \(\ne\)(A%p)^B
运动积分,也不知道该咋总结,看看吧。
正常字符串
- 给一堆字符串,问其中哪些字符串是由其他字符串组成(单词拼接),当字符串最大长度小于字符串总数时,可以第一层循环枚举哪一个字符串,第二层枚举当前字符串在哪个位置分开为两个,再跑字典树。