当前位置: 首页 > 工具软件 > Sausage > 使用案例 >

Codeforces 282E Sausage Maximization Trie字典树

慕容成和
2023-12-01

题意:给n个数字组成的串, 可分成不相交的前缀和后缀,要求让该前缀和后缀内的所有数的xor值最大

题解:我们可以先处理出到第i位的前缀xor值,和i位开始的后缀xor值,因为要求前缀后缀不相交,所以我们可以将对于第i位,可以将i位前的前缀都加入字典树,然后在字典树中去匹配后缀,匹配原则如下:
首先,字典树存的是前缀的二进制,查询的是后缀的二进制,数据范围最多32位,所以树32层,即我们可以将,前缀后缀都转化为32位二进制。

添加时,从最高位开始添加。查询时也一样。

对于每一位,不同的xor值为1,所以我们尽量找不同的,否则开辟新枝。

另外,求前缀后缀时,可和添加查询一起在一个for循环内求得,后缀利用的位运算是(a^b^c)^a=b^c。


代码

开始的版本: https://github.com/liusiyuxyfx/MyACM/blob/master/DataStructure/TrieTree/CF282E.cpp

优化修改过的:https://github.com/liusiyuxyfx/MyACM/blob/master/DataStructure/TrieTree/CF282E-2.cpp


 类似资料: