题目大意:在n颗石子中,第一次可取1到n-1颗,之后每次取的不超过上一次取的石子数。取完的获胜。
给出结论:当n为2的k次方时,是必败局面,否则先手必胜。(k>=1)
证明:
首先,考虑n为奇数时,每次取1,对手下一次也只能取1,必胜。
否则n即为偶数,是2的k1倍。
当k1为奇数时,是必胜策略,因为每次取2,最终由先手取完,要是其中某次后手不取2,取1,便转移到奇数的局面,还是先手胜利。
所以2的奇数倍是必胜态。
剩下2的偶数倍,是4的k2倍。
同理,当k1为奇数时,同样是必胜策略。奇数不能取,取2的话,剩下的为2的奇数倍,是必胜态。
再考虑4,8,16……的偶数倍。
得到一个类似数学归纳法证明的结论:
当n为2的1到k次方的奇数倍都为必胜态时,则n为2的k+1次方的奇数倍也为必胜态。
因为:
当先手取2的k+1次方后,后手不取2的k+1次方,就必定转移到其他的必胜态(之前2的某次方的奇数倍),或者一直取下去,也是先手取完。
当然,当n恰为2的k次方时,一次是取不了2的k次方的,所以只能转移到之前的2的某次方的奇数倍。
和hlq大神讨论了另外一种二进制解法。与lowbit 相关。
在二进制下,先手取最后一个1就能够获胜。
取的是第k位,之后的全部都会是0.
把取第k位两次,从0取为1,再从1取回0.看做一个过程,无疑这个会导致前面的退位。
我们先考虑只取第k位,暂时不取k位之后的。
k位之前的部分代表的数,就是这个过程的倍数。每个过程都包括先手和后手都取一次。
当最后取完时,进行了若干次完整的过程。可以看做先手是先将1取成0,之后先后手进行若干次过程(后手取为1,先手再取回0)。所以先手是必胜的。
假设后手不取第k位,反而取后面一个更小的位。
因为取的是最后一个1,所以后面都是0,后手便把某一位0取做了1,先手只需再将最后一位1取做0,便是和上面论述的一样的问题。
因为2的n次方,是只有第一位为1的二进制数,并且规则规定我们取不到那一位,所以先手只能取到一个0位,必败。