不妨设它们为 [ a ,b ,c ] , 操作一下 , 变成了 [ x , x ,x ] , x 是它们的异或和 . 好像就做完了 .
四个数的情况
不妨设它们为 [ a , b , c , d ] , 把前三个操作一下 , 变成了 [ x , x , x , d ] , 好像没有结束 . 但我们假设最终状态 ( 假设能完成 ) 是 [ y , y , y , y] ,那么显然 , 异或和是 y \oplus y \oplus y \oplus y = 0 .
这时我们注意到 : 如果对一个序列进行一次操作 , 异或和将变为 ( 设原状态为 [a , b , c , ... , z ] , 我们对 a , b , c操作 ) : ( a \oplus b \oplus c) \oplus ( a \oplus b \oplus c) \oplus ( a \oplus b \oplus c) \oplus ... \oplus z = a \oplus b \oplus c \oplus ... \oplus z , 没有改变 .
所以 , 我们发现 : 对于一个偶数数列 , 它能变成全部一样的条件是 : 原序列异或和为 0 .
那么 , 回到开始 , 我们发现 : x \oplus x\oplus x \oplus d = 0 \Rightarrow x=d . 所以 , 我们知道 , 四个数只有前三个数和第四个数异或和相等 ( 其实也就是四个数异或和为 0 ) 时有解 , 否则无解 .
五个数的情况和任意奇数的情况
不妨设它们为 [ a , b , c , d , e] .
我们将前 3 个操作一下 ,变成 [ x ,x , x ,d ,e ] ; 再把后三个操作一下 ,变成 [ x ,x , y , y ,y ] ; 好像 y 更多一些 , 那我们把 x 变成 y : 将前两个和最后一个操作一下 ( x \oplus x \oplus y = y ) , 就全变成 y 了 .
受此启发 , 我们可以构造出一个方案 : 从 第 1 , 3 , 5 ... 个数出发 , 每次 3 个数操作一下 , 数列就可以变成 [ a , a , b , b , ... , z , z ,z ] 的情况 . 这时候我们把所有不是 z 的数都变成 z , 也就可以将第 1 和 2 , 3 和 4 , 5 和 6 ... 都和最后一个数操作一遍 , 我们就可以得到全是 z 的序列了 .