悼念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;
}

猜你喜欢

转载自blog.csdn.net/mch2869253130/article/details/85597958
今日推荐