【牛客CSP-S提高组赛前集训营1】A - 仓鼠的石子游戏【博弈论】
题目大意:
题目链接:https://ac.nowcoder.com/acm/contest/1100/A
仓鼠和兔子被禁止玩电脑,无聊的他们跑到一块空地上,空地上有许多小石子。兔子捡了很多石子,然后将石子摆成n个圈,每个圈由a[i]个石子组成。然后兔子有两根彩色笔,一支红色一支蓝色。兔子和仓鼠轮流选择一个没有上色的石子涂上颜色,兔子每次可以选择一个还未染色的石子将其染成红色,而仓鼠每次可以选择一个还未染色的石子将其染成蓝色,并且仓鼠和兔子约定,轮流染色的过程中不能出现相邻石子同色,谁不能操作他就输了。假设他们两个都使用了最优策略来玩这个游戏,并且兔子先手,最终谁会赢得游戏?
思路:
对于每一堆石子按顺时针编号。
如果先手在涂颜色,那么后手就在涂颜色。如果后手不能在上色那么只有已经被后手上色的可能。但是由于后手保证一定在先手后面位置上色,所以如果已经被后手上色,那么必然已经被先手上色,那么先手就不可以在上色了。故先手每上一个色,后手必然也可以上色。
所以除了在只有一个石子的情况下,先手必败。
那么异或起来就好了。
代码:
#include <cstdio>
using namespace std;
const int N=1010;
int n,T,ans,x;
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
ans=0;
for (int i=1;i<=n;i++)
{
scanf("%d",&x);
ans^=(x==1);
}
if (ans==1) printf("rabbit\n");
else printf("hamster\n");
}
return 0;
}