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