每天一道博弈论之“巴什博弈”    题意:   题解:   题意:   题解:

   由于明天开学,不一定有时间写博客,故今天一次写两道题qaq

q1:

   一堆n个石子,可以取1,2,3...m个,双方轮流取,给你n和m,问先手胜还是后手胜

  题解:

   易得当n%(m+1)==0时后手必胜,否则先手胜。假如对方取x个,你就取(m+1-x)个,使得对手面对的数一直是(m+1)的倍数,当最终对手面对m+1时,显然他已经输了。

q2:

  题意:

   一堆n个石子,可以取1,2,4,8...(2的次幂)个,给你n,问先手胜还是后手胜

  题解:

   首先我们可以考虑根据SG函数,可以在O(nlogn)的复杂度内算出答案。这种做法大概可以解决n<=10^5的数据。那么n很大怎么办呢?有没有O(1)的做法呢?

   当然有啦^_^

   请考虑上面一题中用到的技巧。我们可以发现2的次幂在mod3的意义下只可能是1或者2(没有0),所以我们猜想是不是n为3的倍数时后手必胜呢?

   我们假设对手拿到n为3的倍数,且对手拿完之后剩余大于3(因为剩下1或2你就赢了,而对手不可能拿掉3的倍数),那么你一定可以通过拿掉1或者2使之变为3的倍数。那么对手一定会面临面前数字为3的窘境,这时他已经黔驴技穷了。

   综上,n为3的倍数时后手胜,否则先手胜。