题目大意是这样的:

给定长度为n的序列A[i],求所有A[i] xor A[j] (i<j)的值之和。

如序列:7 3 5

转化为二进制
7:111
3:011
5:101

一位一位计算
7 xor 3+3 xor 5+7xor 5
(二进制)
=(100 xor 000)+(10 xor 10)+(1 xor 1)  //7 xor 3
+(000 xor 100)+(10 xor 00)+(1 xor 1)  //3 xor 5
+(100 xor 100)+(10 xor 00)+(1 xor 1)  //7 xor 5
按列计算
就变成乘法了:1+1+0=2*1=2
                    0+1+1=2*1=2
                0+0+0=0*1=0
再加权:2*4+2*2+0*1=12
现在的问题是如何快速计算每一列(位)的值?

可以发现只有0和1组合xor才可能产生 1,于是每列 1的个数就是这一列1的个数*0的个数。

结果就是   ∑(1<<i)*第i列1的个数*第i列0的个数

相关文章:

  • 2021-09-08
  • 2021-10-08
  • 2021-04-04
  • 2021-04-08
  • 2021-07-18
  • 2022-12-23
  • 2021-12-03
  • 2022-02-21
猜你喜欢
  • 2021-07-09
  • 2022-12-23
  • 2021-06-02
  • 2021-04-04
  • 2021-09-18
  • 2021-12-04
  • 2021-10-22
相关资源
相似解决方案