如果给定 array(XOR)array[1:] 则查找一个数组
Find an array if array(XOR)array[1:] is given
假设我们有数组 a,第二个数组 b = a[1:](只是删除了 a 的第一个元素)。我们得到数组 c,它是 XOR 的结果,c[i] = a[i]*b[i] (0<=i
要证明你做不到这一点非常简单。
c
比 a
少一个元素。如果 c
以完全可恢复的方式表示与 a
相同的信息,您可以以相同的方式一次又一次地压缩 c
,直到只剩下一个元素。显然转换是有损的。
反过来说,没有唯一的方法可以根据 XOR 选择一对数字。无论您选择哪个数字作为对中的第一个,都有一个解决方案。
但是,给定 c
和 a
的任何元素,您可以完全恢复 a
。给定 (x ^ y) ^ y = x ^ (y ^ y) = x
和 c[i] = a[i] ^ a[i + 1]
,很容易在给定任何 a[i]
.
的情况下展开 a
的值
不失一般性,我们假设您得到 a[0]
。由于 c[0] = a[0] ^ a[1]
,我们得到 a[1] = c[0] ^ a[0]
。现在您可以找到 a[2] = c[1] ^ a[1]
,依此类推所有 a[i]
.
假设我们有数组 a,第二个数组 b = a[1:](只是删除了 a 的第一个元素)。我们得到数组 c,它是 XOR 的结果,c[i] = a[i]*b[i] (0<=i
要证明你做不到这一点非常简单。
c
比 a
少一个元素。如果 c
以完全可恢复的方式表示与 a
相同的信息,您可以以相同的方式一次又一次地压缩 c
,直到只剩下一个元素。显然转换是有损的。
反过来说,没有唯一的方法可以根据 XOR 选择一对数字。无论您选择哪个数字作为对中的第一个,都有一个解决方案。
但是,给定 c
和 a
的任何元素,您可以完全恢复 a
。给定 (x ^ y) ^ y = x ^ (y ^ y) = x
和 c[i] = a[i] ^ a[i + 1]
,很容易在给定任何 a[i]
.
a
的值
不失一般性,我们假设您得到 a[0]
。由于 c[0] = a[0] ^ a[1]
,我们得到 a[1] = c[0] ^ a[0]
。现在您可以找到 a[2] = c[1] ^ a[1]
,依此类推所有 a[i]
.