如果给定 array(XOR)array[1:],则查找数组

问题描述

考虑我们有数组 a,第二个数组 b = a[1:](只是被删除的第一个元素)。我们得到数组 c,它是 XOR 的结果,c[i] = a[i]*b[i] (0

解决方法

证明你做不到很简单。

c 的元素比 a 少一个。如果 c 以完全可恢复的方式表示与 a 相同的信息,您可以以相同的方式一次又一次地压缩 c,直到只剩下一个元素。显然,转换是有损的。

反过来说,没有唯一的方法可以根据 XOR 选择一对数字。无论您选择哪个数字作为配对中的第一个,都有一个解决方案。

但是,给定 ca 的任何元素,您可以完全恢复 a。鉴于 (x ^ y) ^ y = x ^ (y ^ y) = xc[i] = a[i] ^ a[i + 1],在给定任何 a 的情况下,很容易展开 a[i] 的值。

不失一般性,让我们假设您得到了 a[0]。由于 c[0] = a[0] ^ a[1],我们得到 a[1] = c[0] ^ a[0]。现在您可以找到 a[2] = c[1] ^ a[1] 等所有 a[i]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...