原题链接
题目大意
有三堆苹果,苹果个数分别为M,N,N
Alice和Bob两个人要按照一定的规则依次从这三堆中取走苹果,最后将苹果拿光的人将获得胜利,取苹果的规则如下:
1.选择一堆苹果,并从中取走不超过$S$个苹果
2.从每一堆苹果中拿走相同数目的苹果(可以超过$S$),如果某一堆的苹果不够拿则不能采取这种取法
每次开始均由Alice先取
解题思路
设三堆苹果的状态表示为$(A,B,C)$
- M<N的情况下,先手必胜
可先手从每堆中拿走$M$个苹果,$(M,N,N)->(0,N-M,N-M)$
之后变为nim博弈中的先手必输局面,后手只需维持两堆数量的平衡即可胜利。 - M=N的情况下,先手必胜
从每堆中直接拿走$M$个苹果$(M,M,M)->(0,0,0)$ - M>N的情况下
- 当$M=k*(s+1),N<S+1$时则后手必胜
- 反之则先手必胜
=.=只有一种情况后手能赢呗就是
AC代码
1 | #include<bits/stdc++.h> |