「牛客CSP-S2019赛前集训营1」仓鼠的石子游戏
传送门
NowCoder
解题思路
考虑这样一件事:在任何的同一个石圈,后手肯定会输。
证明很简单,手玩一下就可以大致意会。
但是有一种特殊情况,就是大小为1的圈,这种圈就是起到一次交换先后手的作用,所以这就是突破点,先手要是想赢,就必须成为后手,同理后手也一定会想办法不变成先手。
所以我们得出:两人采取最优动法一定会先把所有大小为1的石圈涂完,然后确定先后手,即确定胜负。
所以我们就只需要判断一下大小为1的石圈的个数的奇偶性即可,奇数先手赢,偶数后手赢。
细节注意事项
- 咕咕咕。。。
参考代码
#include <cstdio>
#define rg register
int main() {
int T, n, cnt;
scanf("%d", &T);
while (T--) {
scanf("%d", &n), cnt = 0;
for (rg int a, i = 1; i <= n; ++i)
scanf("%d", &a), cnt ^= (a == 1);
puts(cnt ? "rabbit" : "hamster");
}
return 0;
}
完结撒花 \(qwq\)