异或和之和
题目来源
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组
原题链接
蓝桥杯 异或和之和 https://www.lanqiao.cn/problems/3507/learning/
问题描述
问题分析
要点1:异或运算
概念
异或(Exclusive OR,简称 XOR)是一种数学运算符,常用于逻辑运算与计算机中的位运算。当且仅当两个输入值不同时,异或运算输出为真(1),否则输出为假(0),即“同为 0,异为 1”。异或运算可以通过数学符号“⊕”表示, 具有交换律、结合律、恒等律等性质。
在编程语言中通常为 p^q。
通俗运算
一位运算:
1 ⊕ 1 = 0,0 ⊕ 0 = 0;
1 ⊕ 0 = 1,0 ⊕ 1 = 1;
1 ⊕ 1 ⊕ 1 =1,1 ⊕ 1 ⊕ 0 =0;
也就是说,奇数个1则结果为1,偶数个1则结果为0.
多位运算:
例如,计算 5 ⊕ 3 5\oplus3 5⊕3, 需要先转换成二进制,再对每一位取异或,输出二进制后再转换为十进制。
5 = 101 ,3 = 011,6=110
101 ⊕ 011 = 110 101\oplus011=110 101⊕011=110
5 ⊕ 3 = 6 5 \oplus 3 = 6 5⊕3=6。
要点2:异或前缀和
递推关系
s [ i ] s[i] s[i] 表示从第一个值到当前第i个值的所有异或和,
即 s [ i ] s[i] s[i] = a[1] ^ a[2] ^ a[3] ··· a[i-1] ^ a[i] 的异或和,
则 s [ i − 1 ] s[i-1] s[i−1] = a[1] ^ a[2] ^ a[3] ··· a[i-1] 的异或和,
易得,s[i] = s[i-1] ^ a[i] 。
前缀和反推异或和
s [