这是一道比较综合的数学题目,光是吧题目看懂就花了我好一会儿时间,先看看题目吧:
题目分析:对于m段给定连续段的或值,要求出n个数的序列子序列的异或值之和;
题解:
这道题,我们先不要把它当作一个数一个数来做,而是要考虑每一位的贡献值;
考虑二进制第 位对"数组所有子序列异或值的和"的贡献。设 中第 位等于1的个数为 ,从中取奇数个异或后第 位仍为1,对答案有贡献。所以总贡献为 。其中 表示从 个数字中取奇数个数字的方案数, 表示取第 位等于0的方案数, 表示每个方案对答案的贡献。所以总贡献为 。但是上述前提是 。当 即所有数字第 位都是0时,对答案的贡献是0。如何判断 中第 位是否有1?由于每个 至少出现在一个连续段中,将所有段 的或等于 的或。判断或中是否有1即可。