Game
只要找到一个子局面是P-position(先手必败)就能说明是N-position(后手必败),反之为P-position。
SG函数(Sprague-Grund)
mex(minimal excludant)是定义在整数集合上的操作。它的自变量是任意整数集合,函数值是不属于该集合的最小自然数。
终止状态的SG值显然为0,并且SG值为0的状态就是P状态,SG值不为0的状态就是N状态.
Nim Game
有n堆石子,石子数目=分别为$a_1,a_2,a_3 · · · a_n$,A,B两人每次可以选一堆石子取走任意多个
P-position: $a_1\wedge a_2\wedge · · · \wedge a_n=0$
Wythoff’s Game
两堆石子,个数为$x_1,x_2$; A,B轮流取石子,规定要么只取一堆的任意多个,要么在两堆里取同样任意多个
P-position: (0,0)(1,2)(3,5)(4,7)
- $a_k$是未在之前出现过的最小自然数
- $b_k=a_k+k$
- 由Beatty定理可得: $\frac 1\alpha+\frac 1 {\alpha+1}=1,\alpha=\frac {1+\sqrt5}2$
Beatty数列和Beatty定理
取正无理数α,β,使得$\frac 1\alpha+\frac 1 \beta=1$
构造两个数列a,b,它们的通项为$a_n=⌊αn⌋,b_n=⌊βn⌋$
那么这个数列显然是正整数序列,Beatty定理指出,两个数列都是严格递增的,并且每个正整数在两个数列中只出现一次
Fibonacci Nim
有一堆个数为n的石子,A,B轮流取石子,满足:
- 先手不能在第一次把所有的石子取完;
- 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间 (包含1和对手刚取的石子数的2倍)
P-position: 1,2,3,5,8,13,21,34,55,89,…(Fibonacci)
Zeckendorf定理
任何正整数可以表示为若干个不连续的Fibonacci数之和。
Staircase Nim
n堆石子,每堆石子的数量为$x_1,x_2,….x_n$,A,B轮流操作,每次可以选第k堆中的任意多个石子放到第k-1堆中,第1堆中的石子可以放到第0堆中.
P-position: $x_1 \wedge x_3\wedge x_5…\wedge x_{2*n+1}=0$
Anti Nim
有n堆石子,A,B两人每次可以选一堆石子取走任意多个,取到最后一个石子的人为输.
N-position: 所有堆石子数都为1且SG值为0 ; 至少有一堆石子数大于1且SG值不为0
Nim变形
两个人在一个1*N的格子内挪动棋子,刚开始在若干个位置上有若干个棋子,每一个选手可以进行的操作时选择一个棋子并把它向左方移动,当然不能越过其它的棋子,也不能超出边界。
按位置升序排列后,从后往前把他们两两绑定成一对。如果总个数是奇数,就把最前面一个和边界(位置为0)绑定。对手移动左,你移动相同步数;对手移动右,表示取相应的石子.
K倍动态减法
K=1 P-position: 2^k 先手的策略是取lowbit(n)
K=2 P-position: Fibonacci Nim
K>2 (K=1或K=2也可以用次方法构造)仿照斐波那契博弈的构造方法构造一个数列an b[]作为辅助数组表示前i个的a能够按规则构造出的最大的数
1
2
3
4a[i+1]=b[i]+1;
//寻找最大的 t 使得 a[t] * K < a[i+1];
b[i+1] = b[t] + a[i+1];
P-position: a[]