博弈题总的思路是:
步骤1:将所有终结位置标记为必败点(P点);
步骤2: 将所有一步操作能进入必败点(P点)的位置标记为必胜点(N点)步骤3:如果从某个点开始的所有一步操作都只能进入必胜点(N点) ,则将该点标记为必败点(P点) ;
步骤4: 如果在步骤3未能找到新的必败(P点),则算法终止;否则,返回到步骤2。
一般的简单题通过分析出简单数据的答案找出规律。
规律不好找的时候通过SG函数来找。
当数据比较大,内存不够SG函数,可以通过SG函数分析简单的数据来找规律。
组合类的游戏先求出各个游戏单个的sG函数,再利用定理(异或)来解,
只用用这个定理的时候求出具体的SG函数值才有意义,不然区分是否是零就好了。
Nim类游戏就是属于组合类游戏吧
最后取的为win的时候
对于nim游戏的某个位置(x1,x2,x3),当且仅当它各部分的nim-sum等于0时(即x1⊕x2⊕x3=0),则当前位于必败点。
对于每次操作,先手win的情况下,先手每次保证取都保证异或为0,(通过这样可以判断先手有多少种操作走到必败点)
最后取的为loser的时候
这种规则只分为两种情况。一种是每一堆的牌都是只有一张,那么这样的话,只需要看有几堆,自然可以得出先手是输是赢。
对于至少有一堆是两张以上的牌的,那么操作还是按照之前的规则,取异或为0先手输。