1.高斯消元与XOR相结合
- 从N个数中选出两个数,使XOR和最大。
思路:对于每个数都插入到字典树中,利用字典树进行查找。O(60*n)
- N个点的边带权的树,找一条路径使XOR和最大。
思路:将每个点的值视为从根到这个点的路径上值的异或,转化为问题一。
- 从N个数中选出若干个,使XOR和为K,给出方案或指出不可行。
思路:对每一个数进行考虑,然后对每一个数的每一位建立方程,总共有60个方程。
设N个未知数,M个方程,A为系数矩阵,时间复杂度(N*M^2)
- 在上述基础上,给定M个限制,每个限制是那N个数的一个子集,要求该子集中的数恰有奇数个或偶数个被选择。
思路: 给每个限制添加一个方程,利用上述的方法解决
- 从N个数中选出任意个数,使XOR和最大
思路一:从高到低确定K的每一位,设当前考虑第i位
若Ki = 1可行则确定(判断是否可行,对前i位列方程)
否则Ki = 0,时间复杂度O(N*60^3)
思路二:利用线性基
- 从N个数中选出任意个数,求能得到的XOR和的种数。
思路:线性基有k个,答案为2^k(特判0是否能取到,如果不能,ans-1)
- 从N个数中选出任意个数,使它们的XOR和与K的XOR和最大。
思路:假设(1LL<< j) &ai,那么在i之后的线性基数中第j为不可能出现为1,先求解出线性基,然后贪心判断就可以了