题解:P12177 [蓝桥杯 2025 省 Python B] 异或和
wenqinghua1001 · · 题解
思路
本题要求输出
的值。
首先,暴力使用双重循环,对于
首先,数据最大值的二进制有多少位,外循环就遍历多少次。
就拿第二组样例说,第
以此推出第三层、第四层,最终答案是
Python 代码
AC 记录
import sys
input = lambda: sys.stdin.readline().strip()
n = int(input())
a = list(map(int, input().split()))
ans = 0
for i in range(20):
xiabiaohe_0 = 0
xiabiaohe_1 = 0
geshu_0 = 0
geshu_1 = 0
for j in range(n):
q = (a[j] >> i) & 1
if q==1: # 此位为 1。
ans += (j * xiabiaohe_0 - geshu_0) * (1 << i)
xiabiaohe_1 += 1
geshu_1 += j
else: # 此位为 0。
ans += (j * xiabiaohe_1 - geshu_1) * (1 << i)
xiabiaohe_0 += 1
geshu_0 += j
print(ans)