zoukankan      html  css  js  c++  java
  • 学习笔记 Nim

    Nim

    谁取到最后一个谁赢

    定义 : 异或和为0 T态 异或和不为0 S态

    定理1 对于任意一个S态 总能合理合法地使其转化为T态

    这是可以证明的

    还记得取火柴游戏吗 ? ? ?

    (x=a_1 xor a_2 xor a_3 xor ...... xor a_n>0)

    那么根据异或的意义 对于x的最高位 必定存在(a_i)与其最高位对应

    那么$ a_{ii}=a_i xor x<a_i $如果具有着相同最高位的话 一定是相互消去最高位的

    所以我们仅需要从(a_i)当中取出((a_i-a_ii))根火柴 S->T

    定理2 对于任意一个T态 无论怎么取 都是转化为S态

    反证法证明

    (x_1=a_1 xor a_2 xor a_3 xor ...... xor a_i xor ...... xor a_n=0)

    (x_2=a_1 xor a_2 xor a_3 xor ...... xor a_{ii} xor ...... xor a_n=0)

    那么(x_1 xor x_2=a_1 xor a_2 xor a_3 xor ...... xor a_i xor ...... xor a_n xor a_1 xor a_2 xor a_3 xor ...... xor a_{ii} xor ......a_n=0)

    也就是(a_i xor a_{ii}=0) 与已知矛盾 所以得证

    那么 一开始为S态

    先手可以先将S态转换为T态

    然后就是后手 先手 后手 先手

    由于每一次 后手面对的是T态 只可以将T态->S态

    但是先手绝顶聪明 总是可以将S态->T态

    那么 最后总会是后手面对全0的T状态 那么就是loser

    同理一开始为T态。。。。。。

    例题

    【POJ1704】

    【luogu1247】

  • 相关阅读:
    springMVC静态资源
    MyBatis Generator
    使用springMVC时的web.xml配置文件
    Semaphore
    spring注解驱动--组件注册
    第1章 初始Docker容器
    docker面试整理
    第5章 运输层
    验证码
    带进度条的上传
  • 原文地址:https://www.cnblogs.com/LovToLZX/p/13757516.html
Copyright © 2011-2022 走看看