奇异局势
所谓奇异局势就是选手在面对这个局势时会必败。
策略
将当前面对的非奇异局势变为奇异局势留给对方,
Bash Game
有1堆含n个石子,两个人轮流从这堆物品中取物,规定每次至少取1个,最多取m个。取走最后石子的人获胜。
一种奇异局势是,n=(m+1)*k , 即 n%(m+1)=0,那么后行者必然获胜
奇异局势/策略
尽可能的使得剩余石子数 n 满足n%(m+1)!=0,使得对手面对奇异局势 N = (M+1)*K
Nimm Game
有k堆各n个石子,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限。取走最后石子的人获胜。
奇异局势是(0,0…,0)或者(n,n,0…0),只要对手总是和我拿走一样多的物品,最后会面对(0,0…,0),对于一个局势(s1,s2,…sk)【s1<s2<…<sk】,对所有石子个数做位的异或运算,s1^s2^s3^…^sk,如果结果为0,那么局势(s1,s2,…sk)就是奇异局势,先行者必败,反之,有取胜的方法。从二进制位的角度上说,奇异局势时,每一个bit位上1的个数都是偶数。
策略
从某一堆取出若干石子之后,使得每一个bit位上1的个数都变为偶数。
也就是将sk变为s1^s2^...^s(k-1),那么拿的石子数为 sk-(s1^s2^...^s(k-1))
Wythoff Game
有2堆各n个石子,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取1个,多者不限。取走最后石子的人获胜。
奇异局势组成的序列是(0,0),(1,2),(3,5),(4,7),(6,10)......(X,Y),经过推导发现,X = K(1+sqrt(5.0))/2,Y = X + K , K = 0 , 1 , 2 , 3 ,.......,所以,对于给定的局势(A,B),我们只需要判断A是否满足 K(1+sqrt(5.0))/2,以及B是否等于 A + K 或者 A = (K+1)*(1+sqrt(5.0))/2 ,B = A + K + 1