题解

为了规范化,求$SG$函数的方程一般由规模和禁手组成,一般不能限定下一次的操作类型(因为SG函数是将局面划分为子局面,而不是将子局面合并成局面)

举个例子:

有一堆石子,两个人轮流从中拿$w[0]/w[1]/w[2]$个石子,但是如果对方上一次拿了$w[1]/w[2]$个,那么自己这一次就不能拿$w[1]/w[2]$个,不能拿者输,求$SG$函数

1.

如果设$f[i][j]$表示当前有$i$个石子,本轮操作的人决定要拿$w[j]$个石子的$SG$值(此处限定了下一次操作的类型)

那么显然$f[i][j]=mex { f[i-w[j]][k] (j=0 \ or \ j\not=k)} \ $

首先,我们要求的显然是不限定第一次操作要取多少个,只要总共取$n$个就行的$SG$值;但是$f[n][0/1/2]$却分别表示限定第一次操作拿$w[0/1/2]$个的$SG$值,很难推到我们想要的$SG$值

其次,这样求出来的$f$值是完全错误的!考虑$f[i-w[1]][0/2]$分别为$0/2$,那么$f[i][1]=1$,代表此处先手必胜,具体获胜方法为取$w[1]$个石子,但是此处你无法限定状态一定转移到$f[i-w[1]][0]$(即你无法强迫下一论对方一定取$w[0]$),你没法决定下一个人要选哪一种操作,它自然可以选$f[i-w[1]][2]$保证他一定获胜,此处就与先手必胜矛盾。\textbf{通俗地讲,平时的$f_i=mex{ f_k}$可行是因为你可以通过拿$i-k$个石子将局面限定到固定的后继状态$f_k$上,但是这里不可行是因为你拿$w[j]$个也无法保证一定将局面限定到某个后继状态$f[i-w[j]][k]$上。一般地讲,这是因为不同的后继状态可以通过相同的操作(此处即取$w[j]$个石子)得到,使得当前轮到的人无法通过决定自己的本次操作到达所有的后继状态,此时再取$mex$就肯定不可行了}

2.

如果设$f[i][j]$表示当前有$i$个石子,本轮操作的人不能拿$w[j]$个石子(表示禁手)的$SG$值($f[i][0]$表示本轮操作的人没有禁手)

那么显然$f[i][j]=mex \ { f[i-w[k]][k] (j=0 \ or \ j\not=k)\ }$

那么显然$f[n][0]$即为所求