zoukankan      html  css  js  c++  java
  • 状态证明[置顶] 编程之美 NIM游戏与NIM扩展游戏的讨论及解

    每日一贴,今天的内容关键字为状态证明

        编程之美下面有个NIM的游戏,规矩如下:

        有n堆石头,两个人轮番从中取,一次只能在一堆中取,最少取一个,最多把这一堆取完,获得最后一个石头的人成功,问谁有必胜策略。

        解:

             设这n堆石头的个数分别是X1,X2……Xn,设F(X)= X1 ^X2 ^ X3……^Xn。如果F(X)= 0则后取的获胜,否则,先取的获胜。

        证明:

             如果这剩下的石头的个数的的异或值为0,则无论从一堆中取多少个,取完之后剩下的异或值必定不是0,反之,如果异或值不为0,那么必定可以从一堆中取一些,从而使取完之后的异或值为0.

        但是,有一个似乎更难的题目,就是有n堆石头,两个人轮番从中取,一次只能在一堆中取,最少取一个,最多把这一堆取完,获得最后一个石头的人输,问谁有必胜策略。

        这个题目的结果与下面完全相同。

        证明如下:

             显然,如果某一个人取之前面临的状态是k,1,1,1,1…1,也就是除了一堆不是1,其它的都是1,则这个人必定会成功,因为这个人可以保证取完之后每一堆剩下的数目都是1,并且还有奇数个,然后这个人必定成功。

        每日一道理
    因为自信,在呀呀学语时,我靠着纤嫩的双腿,迈出人生的第一步;因为自信,我一次次将第一名的奖状高高举起;因为自信,我毫不吝惜地剪掉飘逸的长发,在运动场上展现风采……感谢自信,它给了我一双翅膀,让我在电闪雷鸣中去飞翔,在风雨中去搏击人生!

             在游戏开始的时候,如果F(x)=0,则说明第一个人取完之后,F(x)!=0,所以,说明第一个人取完之后游戏的状态不可能全部是1,这样,在第二个人思考的时候,如果此时他面临的状态是k,1,1,…1,则它必定成功,否则他就从一堆中取,从而使取完之后F(x)=0,这样始终下去,也就是说,最后涌现的k,1,1,1…1 必定是第二个人首先看到,这样他必定成功。

             反之,如果F(x)!= 0,则如果第一个人面临的状态是k,1,1,1…1,则他必定成功,否则,他可以保证自己取之后使F(x)=0,显然,F(x)=0的时候必定不可能是k,1,1,1…1的状态,也就是说,状态k,1,1,1..1这类状态永远不是第二个人会碰到的,于是,总会到必定时候,第一个人在自己取的时候面临着k,1,1,1..1的状态。当然,如果第一个人取的时候不是k,1,1,1..1的状态,他就应该使自己取完之后F(x)=0。

             证明终了

        

        版权所有,各位如果转载请标明出处。感谢

        

    文章结束给大家分享下程序员的一些笑话语录: 爱情观
      爱情就是死循环,一旦执行就陷进去了。
      爱上一个人,就是内存泄露--你永远释放不了。
      真正爱上一个人的时候,那就是常量限定,永远不会改变。
      女朋友就是私有变量,只有我这个类才能调用。
      情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。

  • 相关阅读:
    高斯过程回归
    第一行代码读书笔记3+错误分析
    多项式各种操作
    [BZOJ3625] [Codeforces Round #250]小朋友和二叉树
    [BZOJ2055] 80人环游世世界
    [BZOJ3698] XWW的难题
    [BZOJ3456] 城市规划
    分治FFT
    [BZOJ5306] [HAOI2018]染色
    [BZOJ3380] [USACO2004 Open]Cave Cows 1 洞穴里的牛之一
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3085922.html
Copyright © 2011-2022 走看看