【技巧总结】——位运算

本文探讨了位运算中的二进制性质,特别是异或运算的重要性。通过异或的特性解决多种问题,如转换对象、按位操作和前缀和的应用。举例说明了如何利用异或解决经典题目,如数组消除和谜题。通过对二进制位的分析,提出了一种找到影响最小的因子组合的方法,简化了问题求解的过程。

关于二进制的性质

  1. 二进制下能被三整除的数有:有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)

前缀和

  1. 如果要求某一段区间异或起来的值=k的有多少个,那么只需要做一个前缀和,就能转化成 a [ r ]    x o r    a [ l − 1 ] a[r]\;xor\;a[l-1] a[r]xora[l1]的值=k的有多少个了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值