习题:仓鼠的石子游戏(博弈论)

题目

传送门

思路

首先给出结论:
当这一圈的石子数为1的时候,先手必胜
否则,后者必胜

  • 考虑环为偶数

随便找以一条线为对称轴
后手只需要将先手的动作做一次镜面对称即可

  • 考虑环为奇数

最开始先手选择的石头是没有影响的
后手只需要对这个石头隔一个石头的那个石头进行涂色
然后再将中间的石头作为对称轴
之后的操作做镜面对称即可

代码

#include<iostream>
using namespace std;
int t;
int n;
int ans;
int a;
void c_in()
{
    cin>>n;
    ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        if(a==1)
            ans^=1;
    }
    if(!ans)
        cout<<"hamster"<<'\n';
    else
        cout<<"rabbit"<<'\n';
}
int main()
{
    cin>>t;
    for(int i=1;i<=t;i++)
        c_in();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/loney-s/p/11782713.html