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

    Anti-Nim

    地上有n堆石子(每堆石子数量小于10000),

    每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。

    每次只能从一堆里取。谁取走最后一刻谁输

    假如甲是先手,且告诉你这n堆石子的数量,他想知道是否存在先手必胜的策略

    定义使人快乐

    孤单堆:一堆火柴仅有1根火柴
    充裕堆:一堆火柴有大于1根火柴
    
    T态:异或和为0 
    S态:异或和不为0
    
    T2态:T态当中充裕堆数>=2
    T0态:T态当中充裕堆数=0
    
    S0态:S态当中充裕堆数=0
    S1态:S态当中充裕堆数=1
    S2态:S态当中充裕堆数>=2
    
    注意 不存在T1态
    因为只有一个充裕堆时 其最高位对应>1 不会被异或消掉
    也就是充裕堆会影响高位
    

    Nim相关定理

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

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

    Anti-Nim相关定理

    S0态必败 T0态必胜

    这个就比较好想了。。。。。。


    S1态 只要方法正确 必胜

    两个操作

    1.孤单堆是奇数时 那么就拿走充裕堆

    2.孤单堆是偶数时 那么就把充裕堆拿成孤单堆


    S2态不可以一次性变成T0态

    两个充裕堆你怎么同时取? ? ?


    S2态 只要方法正确 可以一次性变成T2态

    由上可得

    S2态不可以一次性变成T0态并且不存在T1态

    那么S2态只能一次性变成T2态


    T2态只可以只变为S2态或者S1态

    还是 两个充裕堆你怎么同时取? ? ?


    S2态 只要方法正确 必胜

    1)S2态 先手就把TA变为T2态

    由于T2态只可以只变为S2态或者S1态

    如果后手将T2态变为S2态 重复1)

    如果后手将T2态变为S1态 必胜


    T2态必败

    此时也就是先手面临楼上 2) 的情况 必败

    综上
    必胜态:T0,S1,S2
    必败态:S0,T2
    

    经过观察得出最终定理

    1.每一堆石子只有一个时 且异或和为0

    2.存在至少一堆石子多于一个时 且异或和不为0

    此时满足上述一个条件 先手必胜

    SJ定理

    定义Anti-SG游戏

    决策集合为空时 当前者胜
    其余同SG游戏
    

    先手胜利当且仅当

    1.游戏SG函数不为0且某个单一游戏SG值大于1
    2.游戏SG函数为0且任意单一游戏SG值=1
    

    得证

    例题

    【bzoj1022】 (or) 【luogu4279】

  • 相关阅读:
    Socket异步通信
    以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象
    NhibernateProfiler写个自动破解工具
    关于下载GAE High Replication Datastore数据
    .text 0.958 数据添加
    C#实现RTP数据包传输参照RFC3550
    在线商城表结构
    相似字符串
    .net 4.0 的Socket写的支持跨平台双工的轻量级通讯组件
    写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
  • 原文地址:https://www.cnblogs.com/LovToLZX/p/13757505.html
Copyright © 2011-2022 走看看