Algorithm 给定两个数的异或和,如何找到满足它们的对数?
我认为这个问题可能有点令人困惑。所以,我先解释一下 假设给定了两个数的异或和。(请注意,有多对可能满足此要求。) 例如,如果XOR为Algorithm 给定两个数的异或和,如何找到满足它们的对数?,algorithm,math,Algorithm,Math,我认为这个问题可能有点令人困惑。所以,我先解释一下 假设给定了两个数的异或和。(请注意,有多对可能满足此要求。) 例如,如果XOR为5且总和为9,则存在满足总和和XOR的4对。它们是(2, 7) ,(3, 6) ,(6, 3) ,(7, 2) 。所以2+7=9和2^7=5 我只想找到满足和和和异或的对的数目。因此,在我提到的示例中,答案4就足够了。我不需要知道哪对能满足他们 我把这个问题从我的电脑上解决了 我查了一下答案。它提供了一个O(n)解决方案,这是不够的 有一篇社论提供了这个问题的解决办
5
且总和为9
,则存在满足总和和XOR的4
对。它们是(2, 7) ,(3, 6) ,(6, 3) ,(7, 2)
。所以2+7=9
和2^7=5
我只想找到满足和和和异或的对的数目。因此,在我提到的示例中,答案4
就足够了。我不需要知道哪对能满足他们
我把这个问题从我的电脑上解决了
我查了一下答案。它提供了一个O(n)解决方案,这是不够的
有一篇社论提供了这个问题的解决办法。可以找到它。(寻找627A的解决方案)
问题是我不明白解决办法。从我的总结来看,他们使用了这样一个公式,
(如果有两个数字a和b)然后,
a+b=(a或b)+(a和b)*2
我怎样才能做到这一点?其余的步骤我都不清楚
如果有人能提供解决方法或解释他们的解决方案,请提供帮助。a和b是两个数字中的位。因此,它们的总数增加了一倍a XOR b
是仅存在于其中一个数字中的位,因此这些位在总和中只应计数一次
以下是一个例子:
a=4=1*2^2+0*2^1+0*2^0(或仅100)
b=13=1*2^3+1*2^2+0*2^1+1*2^0(或仅1101)
a+b=(1*2^2+0*2^1+0*2^0)+(1*2^3+1*2^2+0*2^1+1*2^0)=1*2^3+2*2^2+0*2^1+1*2^0
注意最后一行,两个数字(2^2
)中的位在总和中是如何计数两次的,而其余的只计数一次
要解决你的问题,你需要找到所有的对(a,b)的总和。您要做的是:
从总和中减去XOR值。剩下的是2*(a和b)
除以2。您现在拥有了a和b中应设置的所有位
因为你有一个异或值,你就知道应该在a和b中的某个位置设置哪些位,而你刚才计算的和值就是应该在这两个位置设置的位。因此,您可以分别列出a或b中设置位的所有排列
要继续我前面的示例,请执行以下操作:
a和b=0100
(始终在这两个字段中设置)
a XOR b=1001
(我们需要尝试所有这些排列)
我们将这些排列作为解决方案:
a=0100+0000=0100,b=0100+1001=1101=>(4,13)
a=0100+0001=0101,b=0100+1000=1100=>(5,12)
a=0100+1000=1100,b=0100+0001=0101=>(12,5)
a=0100+1001=1101,b=0100+0000=0100=>(13,4)
将a+b=(a XOR b)+(a和b)*2想象成进行二进制加法时发生的情况。根据您的示例,a=010
和b=111
:
010
111
---
1001 = 101 + 100
对于每个位,添加a
和b
(0+0=0
,0+1=1
,1+0=1
,1+1=0
,这正是a异或b
加上上上上一次加法的进位,也就是说,如果a
和b
的前两位都是1,那么我们也加上它。这正是a和b)*2
。(请记住,乘以2等于向左移位。)
用这个方程我们可以计算a和b
现在,为了计算您想要的数字,我们逐个查看a异或b
和a和b
的每个位,并将所有可能性相乘。(让我为i
写a
的第位a
)
- 如果
a[i]XOR b[i]=0
和a[i]和b[i]=0
,则a[i]=b[i]=0
。此位只有一种可能性
- 如果
a[i]XOR b[i]=0
和a[i]和b[i]=1
,则a[i]=b[i]=1
。此位只有一种可能性
- 如果
a[i]XOR b[i]=1
和a[i]和b[i]=0
,则a[i]=1
和b[i]=0
,反之亦然。两种可能性
- 不可能有
a[i]XOR b[i]=1
和a[i]和b[i]=1
从你的例子中,a XOR b=101
和a和b=010
。我们得到了答案2*1*2=4
。好的,我理解这一部分。那么我如何使用这个公式来解决这个问题呢?我的意思是如何计算满足和和和和XOR的对数?这是一个漂亮的解决方案!)。谢谢!作为旁注,如果我们可以保证存在一对,那么我们可以说(s-b)/2
是a
的最小可能值(s
是预期的和,b
是预期的按位异或
值:如中所述)?