sg,是用來判斷博弈問題的輸贏的,當sg值為0的時候,就是輸,不為0就是贏;
在這之前,我們規定一個對於集合的操作mex,表示最小的不屬於該集合的非負整數。 舉幾個栗子:mex{0,1,2}=3,mex{1,2,3}=0,mex{0,1,3}=2;
而我們要求的sg的值就和這個有關,定義SG函數:SG(x)=mex{ SG(y) | y是x的后繼,也就是經過操作可以取得的剩下值 }。
舉個栗子:比如一堆石子,我們可以取任意個,那么x個石子的石子的sg值是多少呢?
可以知道,0個石子sg為0,一的時候我們可以取一個,剩下0,的sg是0,那么mex(0)就是1,所以1的sg為1。
遞推下去當為x的時候我們可以取1~x個,那么剩下的值石子個數就是x-1到0個,他的mex(...)就是x,所以這個例子的x值得sg值就是x;
那么,sg可以為我們做什么呢?比如Nimm問題,多堆的時候,我們只需要將每個sg值亦或一下,如果是0就會輸,不是就贏,也就是將每堆的數量亦或就可以了