牛客CSP-S提高组赛前集训营1-仓鼠的石子游戏
题目描述
仓鼠和兔子被禁止玩电脑,无聊的他们跑到一块空地上,空地上有许多小石子。兔子捡了很多石子,然后将石子摆成n个圈,每个圈由a[i]个石子组成。然后兔子有两根彩色笔,一支红色一支蓝色。兔子和仓鼠轮流选择一个没有上色的石子涂上颜色,兔子每次可以选择一个还未染色的石子将其染成红色,而仓鼠每次可以选择一个还未染色的石子将其染成蓝色,并且仓鼠和兔子约定,轮流染色的过程中不能出现相邻石子同色,谁不能操作他就输了。假设他们两个都使用了最优策略来玩这个游戏,并且兔子先手,最终谁会赢得游戏?
输入描述:
第一行输入一个正整数T,表示有T组测试案例。
每组测试案例的第一行输入一个n,表示有n圈石子。 第二行输入n个正整数a[i],表示每个圈的石子数量。
输出描述:
对于每组测试案例,如果兔子赢了,输出”rabbit“(不含引号)如果仓鼠赢了,输出"hamster"(不含引号)。
思路分析:
如果一个圈的石子数等于1,则只能被涂一种颜色。但如果一个圈的石子数大于1时,兔子和仓鼠不论怎样涂色,他们涂的次数总是相同(手模即可),也就是说这是不影响答案的。我们只用考虑石子数为1的圈即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int T,n,a[2000];
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
int ans=0;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
if(a[i]==1)
ans++;
}
if(ans%2==0)
printf("hamster\n");
else
printf("rabbit\n");
}
return 0;
}