关于二进制的性质
- 二进制下能被三整除的数有:有2个1,且奇偶不同,比如
(
3
)
10
=
(
11
)
2
,
(
6
)
10
=
(
110
)
2
(3)_{10}=(11)_2,(6)_{10}=(110)_2
(3)10=(11)2,(6)10=(110)2
或者有3个1,且奇偶性相同,比如 ( 25 ) 10 = ( 10101 ) 2 (25)_{10}=(10101)_2 (25)10=(10101)2
异或
这个运算简直可以封神了,一个数^它本身就是0,这个性质可以做N种题,这也可以说是异或最重要的性质了
转换对象
当与异或操作有关时,找一个数也许不方便,但是二进制位数就那么多,可以先异或一下,把所有可能出现的结果存起来,然后去看看有没有这个数之类的操作(一般与hash结合)
这也是利用上述异或的重要性质
经典例题:
异或 (把所有可能出现的b存起来,然后再根据输入去找是否存在)
谜题(要找的是最终异或=1111……的结果,然后因为数据有40,dfs会炸,所以分两步走,先找前一半,然后把结果存起来,然后后一半的查找就和上面那道题一样)
按位
A r r a y E l i m i n a t i o n Array\;Elimination ArrayElimination(简化一下就是按位异或,那么写出每个数的二进制,发现不管怎么异或,当一位已经是0的情况下,你一直让这几个数异或,这一位都是0,没影响,于是就一位一位来搞,找到每个位置上的1的个数,取个最大公因数,则它里面的因子都能作为一组选择,这样选择之后,一定能把每个位置上的1恰好变为0)
前缀和
- 如果要求某一段区间异或起来的值=k的有多少个,那么只需要做一个前缀和,就能转化成 a [ r ] x o r a [ l − 1 ] a[r]\;xor\;a[l-1] a[r]xora[l−1]的值=k的有多少个了
本文探讨了位运算中的二进制性质,特别是异或运算的重要性。通过异或的特性解决多种问题,如转换对象、按位操作和前缀和的应用。举例说明了如何利用异或解决经典题目,如数组消除和谜题。通过对二进制位的分析,提出了一种找到影响最小的因子组合的方法,简化了问题求解的过程。
94

被折叠的 条评论
为什么被折叠?



