[300iq]Bitwise Xor

本文探讨了如何利用位异或的性质解决一个算法问题。通过分析位异或的特性,提出了一种动态规划的方法,即从最小的元素开始,每次选择与当前集合中最大元素异或后大于目标值的数加入集合。使用Trie树优化查找和插入操作,实现O(nloga)的时间复杂度。最后给出了源码实现。
摘要由CSDN通过智能技术生成

Bitwise Xor

题解

首先我们可以发现一个性质,若 x < y < z x<y<z x<y<z,那么一定有 x ⊕ z ⩾ min ⁡ ( x ⊕ y , y ⊕ z ) x\oplus z\geqslant \min(x\oplus y,y\oplus z) xzmin(xy,yz)
这个结论可以从二进制的角度分析 x ⊕ y x\oplus y xy y ⊕ z y\oplus z yz的异或过程得出。
显然二进制的比较可以从高位到低位依次比较。
如果 x ⊕ y x\oplus y xy y ⊕ z y\oplus z yz在这一位上都是 0 0 0,显然, x ⊕ z x\oplus z xz有这两种异或起来也应该是 0 0 0,这个位置两者没有区别,我们会继续往下比较,这部分也象征着 x , y , z x,y,z x,y,z在这前面几位都是一样的。
x ⊕ y x\oplus y xy y ⊕ z y\oplus z yz其中有一个 1 1 1,那么 x ⊕ z x\oplus z xz这一位也应该是 1 1 1,比是 0 0 0的那一个大,此时便已经符合我们的条件了。
x ⊕ y x\oplus y xy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值