悼念512汶川大地震遇难同胞——选拔志愿者 HDU - 2188 (巴士博弈)

巴士博弈:

有一堆n个物品,两个人轮流取物,每次最多取m个,最先取完的人获胜,问怎么才能获胜?

分析:

当n=m+1时,无论第一个人取多少个,第二个人一定获胜。

当n=k(m+1)时也可以得到第二个人一定获胜。

当n=k(m+1)+s,(s<=m),此时,先取者要想获胜,首先拿走s个,后取者拿走r(r <= m)个,先取者再拿走m+1-k个,此时剩下x(m+1)个,先取者一定获胜。

由上面的分析可以知道,获胜的局面是:当剩余的物品个数为m+1的整数倍的时候,接下来取物品的人一定会输。

#include <stdio.h>

int main()
{
    int c, n, m;
    scanf("%d", &c);
    while(c--)
    {
        scanf("%d %d", &n, &m);
        if(n%(m+1) == 0)
            printf("Rabbit\n");
        else
            printf("Grass\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值