「牛客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\)

posted @ 2019-11-01 22:08  Sangber  阅读(133)  评论(0编辑  收藏  举报