分析
x和y变成x|y , x&y
他们的和不变的,然后我们直到这样变只会让他们的差放大,放大的话平方和肯定更大
对于n个元素而言,多次and和or并不会改变每个位上的1的总数,我们先把每个位置的1的个数统计出来
然后我们只需要贪心地把每个位置的1都往一处堆,这样的话差就会最大
ac code
import sys
from collections import defaultdict
input = sys.stdin.readlinen = int(input())
a = list(map(int, input().split()))counter = defaultdict(int)for aa in a:aa = bin(aa)[2:].zfill(20)for i in range(20):if aa[i] == '1':counter[i] += 1ans = 0
for i in range(n):tempNum &#61; 0for j in range(20):if counter[j] > 0:tempNum &#43;&#61; 1 << (19 - j)counter[j] -&#61; 1ans &#43;&#61; tempNum ** 2print(ans)
总结
位运算中的不变量
and和or的诡计
同一个位上的1的总数保持不变