异或和之和 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

异或和之和

题目来源

第十四届蓝桥杯大赛软件赛省赛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 53, 需要先转换成二进制,再对每一位取异或,输出二进制后再转换为十进制。
5 = 101 ,3 = 011,6=110
101 ⊕ 011 = 110 101\oplus011=110 101011=110
5 ⊕ 3 = 6 5 \oplus 3 = 6 53=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[i1] = a[1] ^ a[2] ^ a[3] ··· a[i-1] 的异或和,
易得,s[i] = s[i-1] ^ a[i]

前缀和反推异或和

s [

你可能感兴趣的:(蓝桥杯,蓝桥杯,c语言,c++)