由于明天开学,不一定有时间写博客,故今天一次写两道题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的倍数时后手胜,否则先手胜。