nim游戏

nim 游戏

给出结论:将所有数异或,若结果为 0,先手必败,否则先手必胜。

设异或值为 x

证明分三步:

  1. 0 局面先手必败。

  2. 对于当前局面若 x0,存在某种方式将其变为 0

    考虑 x 的最高的为 1 二进制位(记为 k),原序列中肯定有至少一个(奇数个)数第 k 位为 1。(设为 ai)所以 aix<ai(前面的位保持不变,然后第 k 位变为 0,后面就算均增加也会减少)。那么我么取走 ai(aix),使得 aiaix。那么新的异或值就是 i=1naix=xx=0,抛给对手一个 x=0 的局面。

  3. 对于当前局面若 x=0,不存在任何方式将其变为 0

    用反证法,假设存在某种方式,且取走的记为 ai,那么有 j=1nai=0,且 j=1i1ajaij=i+1naj=0,两个式子异或,其余的数都消去,剩下 aiai=0,即 ai=ai,而至少要取走一个,所以不存在任何方式。

而当先手的局面 x>0 时,可以构造 x=0,后手又给出 x>0 的局面,先手再给予 x=0 的局面 ,后手总是持有 x=0 的局面,而最终必败状态全 0 就是 x=0,所以后手必定会取到,即后手必败。

反之 x=0,先手不管怎么搞 x>0,后手再将其变为 0,所以先手总是持有 x=0 的局面,而最终必败状态全 0 就是 x=0,所以先手必定会取到,即先手必败。

所以,我们只需要计算异或和,判断是否等于零即可。

code

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17651450.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(18)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起