zoukankan      html  css  js  c++  java
  • 尼姆博弈

    简述

    有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

    分析

    用(A,B,C)来表示某一特定局势,同时规定A<=B<=C。奇异局势表示先手必败。

    1. 显然(0,0,0)是奇异局势。
    2. (0,n,n)是奇异局势,当先手拿走s个石子时,我们对应拿走s个石子,最终转化为(0,0,0)。
    3. (1,2,3)也是奇异局势,无论先手如何取,我们都可以转化为(0,n,n)的局势。

    对于一个奇异局势(A,B,C),我们可以发现,A(XOR)B(XOR)C = 0。

    下面便是判断是否能获胜的关键:即是否处于奇异局势:
    1)将每一组的所有数字按照二进制数表示出来,进行异或,如果异或的结果为零则是必败情况,反之,若不为零,则是必胜情况。
    2)在必胜的情况下,由于所有的数进行异或之后是大于零的,那么一定有一个最大的位数和空位取异或后得到该大于零的最大位数(如:两堆物品,去异或后的二进制表示为10,那么,其中大的一定是两位,两个数即为111或100),如果想要把必胜转为必败情况,只需要将大的数取一定数量,使最高位相同,且之后的数也具备一定条件,使取异或后的值为零。

    具体分析和证明可以参考点击打开链接 ,

    结论

    奇异局势为n1^n2^n3=0,可以推广到如果有m堆物品,则n1^n2^……^nm=0 是奇异局势,表示先手必败;

    例题

    HDU 1850

  • 相关阅读:
    公有云数据库服务的申请与使用
    linux集群
    shell基础知识
    LNMP环境配置
    LAMP环境搭建与配置
    12月17日linux学习
    12月16日linux学习(文档的压缩与打包)
    12月13、14号linux学习
    12月12日linux学习
    目录结构
  • 原文地址:https://www.cnblogs.com/aerer/p/9930993.html
Copyright © 2011-2022 走看看