博弈论SG函数

参考:
http://www.cnblogs.com/ECJTUACM-873284962/p/6398385.html
http://www.cnblogs.com/ECJTUACM-873284962/p/6921829.html

巴什博奕

只有一堆石子,每个人可以从里面取1~m个石子,先取光者胜。

n = m + 1 n = m+1 n=m+1先手必败,因为先手无论选什么,都会使其个数小于m。

因此可以推出更一般的情况:
n = k ∗ ( m + 1 ) n = k*(m+1) n=k(m+1)先手必败,因为后手总能构造出 n = t ∗ ( m + 1 )   t &lt; k n = t*(m+1) \ t &lt; k n=t(m+1) t<k的情况。

总结: 只要能构造出两个可以相互转换的状态便可得出答案。(必胜态,必败态)。

尼姆博弈

有n推石子,每堆有$m_i$个石子,每次可以取在一堆中取任意个石子。

学着巴什博奕做,构造两个可以相互转换的状态。

把每堆石子的总个数用二进制的形式相加。每位都不进位。
例如:
1 2 3
001
010
011

= 022

因为每次都只能在一堆石子上操作,所以对于每一位,每次只能减1或者不变。可以观察出,当所有位都为偶数的时候(偶状态),先手必败,当有一位为奇数(奇状态)的时候先手必胜。

因为总能从一个奇状态转变为一个偶状态。反之,也能从一个偶状态转变为奇状态。 但无法保持当前状态不变。

考虑异或,当一位出现偶数个时,其贡献为0,否则为1。
所以可以将每一堆的个数都异或起来,如果异或和!=0,则先手胜,否则先手败。

有n推石子,每堆石子的个数分别为1,2,3,4,....,n,每次可以取在一堆中取任意个石子。n特别大。

因为n特别的大,所以没法直接对其异或。 但是连续正整数的异或是有规律的。
f[l,r]: [ l , r ] [l,r] [l,r]的异或和
推论1: f [ 0 , 2 k − 1 ] = 0 , 2 ≤ k f[0,2^k-1]=0, 2 \leq k f[0,2k1]=0,2k
XJB证明: 二进制的每一位上都有 2 k − 1 2^{k-1} 2k1个1。

f [ 0 , n ] f[0,n] f[0,n]

  1. n为奇数
    f [ 0 , n ] = f [ 0 , 2 t − 1 ] ⊕ f [ 2 t , n ] = f [ 2 t , n ] f[0,n] = f[0,2^{t}-1] \oplus f[2^t,n] =f[2^t,n] f[0,n]=f[0,2t1]f[2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值