XOR Construction

题解见这篇文章

b1确定的时候,我们如何查询最大值?见最大异或对

当然,也有另一种思路,就是按位考虑

一样的,我们通过模拟位,可以知道bi(i2)与b1的每一位的异同,所以我们确定了b1就确定了所有bi,然而我们却不能确定b1,我们也没办法枚举b1,不然时间复杂度太大了

这个时候我们尝试一下样例。我们直接令b1=0,然后跑样例,跑出来的6个数是0 1 7 6 2 3

写成二进制就是

000
001
111
110
010
011

我们来看看样例输出给的每个二进制

010
011
101
100
000
001

观察两组数的不同,发现在每一位上有可能01互换(原来是0的地方全变成了1,原来是1的地方全变成了0

我们又想到,题目最终要求的是[0,n1],所以每一位的01的总个数是确定的

那么如果我们最开始求出来的这组数在某一位上的1的个数与最终的1的个数不同,那么我们直接将0的地方全变成11的地方全变成0就好了;如果相同的话,这个时候变不变是没有影响的,因为就相当于原来的某两个数交换了一下位置(比如原来第2个数是010,第5个数是000,然后我们现在把从右往左第二位取反,那么取反之后就是第2个数变成了000,第5个数变成了010),显然不影响答案

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示