zoukankan      html  css  js  c++  java
  • 博弈论简单入门sb总结

    博弈论简单入门sb总结


    下午讲博弈论。没预习,GG。

    整个下午都在学。

    0

    有一堆共n个石子,两个人轮流取石子,每个人一次可以取1到k个,取到最后一个石子的人胜利。

    小学生都会的sb题。若k+1|n,后手必胜。否则先手必胜。

    如果k+1|n,先手第一次取了a个的话,后手取k+1-a个就星了。最后先手GG

    否则先手一开始取n%(k+1)个,再按照上面的方法来玩。

    1

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取任意多个,取到最后一个石子的人胜利。

    引入一个叫SG函数的东西。(好吧那叫SG

    直接蒯了:

    一个局面的SG为mex{后继局面的SG}。
    mex运算为集合中没出现的最小的自然数。
    几个局面的和的SG为它们的SG的异或和。
    SG不为0时先手必胜,SG为0时后手必胜。
    

    mdzz不

    然后就很好球了。

    设SG(i)为一堆i个石子的SG值。

    SG(0)=0
    SG(1)=mex{SG(0)}=1
    SG(2)=mex{SG(0),SG(1)}=2
    ...
    SG(i)=mex{SG(0),SG(1),...,SG(i-1)}=i
    

    归纳法可证明SG(i)=i

    所以把每堆石子的个数xor起来,非0则先手胜,是0则后手胜。

    2

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取1到k个,取到最后一个石子的人胜利。

    加了一个限制,实际上将每个a[i]都%=(k+1)就星了。

    考虑感性证明,两个人互相取石子,一个人拿了x个,另一个人马上拿走k+1-x个。

    然后还是异或。

    3

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从至多m堆中取,每堆只能取1到k个,取到最后一个石子的人胜利。

    首先啃腚可以a[i]%=k+1

    emmmmm然后就很不爽了,这怎么做啊

    考虑一下m=1的情况(2号情况)的方案

    比如这几个SG值

    01110110
    10101011
    10010100
    

    xor起来是01001001

    所以先手一开始取走01001001即可,然后后手取了什么数位,先手也跟着取什么数位

    最后先手一定会取到所有都是00000000

    写到这吧

    做几道题再来(咕咕咕

  • 相关阅读:
    [#]
    Windows 下配置 ApacheBench (AB) 压力测试
    [转载]
    Nginx 系列教程
    设置外接显示器顺序(哪个在左,哪个在右)的方法
    [.Net] 一句话Linq(递归查询)
    [Xamarin]
    [SVN]
    [SQL SERVER]
    [Oracle]
  • 原文地址:https://www.cnblogs.com/xzz_233/p/8665993.html
Copyright © 2011-2022 走看看