小团有一个序列a ,下标从1 开始直到n ,分别为
。现在,小团定义了以下式子:)
现在小团想让小美回答
的值
其中, 代表异或运算
请你帮助小美。
小提示:
现在小团想让小美回答
的值
其中, 代表异或运算
小提示:
输入第一行包含一个整数n,表示序列a的长度。接下来一行n个数,空格隔开,第i个数表示
输出包含一个数,即
的值
2 3 2
0
对于40%的数据,对于100%的数据,
根据 零葬题解给出Python版本
重点在于:
因此得到如下规律:
(1) 如果 n / i 为偶数,异或结果为1^2^...^(n%i)。
(2) 如果 n / i 为奇数,异或结果为1^2^...^(n%i)^0^1^2^...^(i-1)。
然后预先计算出前缀和就可以降低时间复杂度。
while True:
try:
n = int(input())
nums = [int(i) for i in input().split()]
ans = 0
# 计算前缀和
pre = [0] * (n + 1)
for i in range(1, n + 1):
pre[i] = pre[i - 1] ^ i
for i in range(1, n + 1):
ans ^= nums[i - 1] # ai 部分计算进去
if (n / i) % 2 == 0: # 异或结果规律的运用
ans ^= pre[n % i]
else:
ans ^= pre[n % i] ^ pre[i - 1]
print(ans)
except:
break