分花生游戏

分花生游戏 

Description

 

4月6日,我校Nicholas代表队做火车前往湖北武汉大学参加“百度杯”第二届华中北区ACM程序设计邀请赛,在火车上老师和队员们觉得要找点事情来做,于是小谭(谭老师)就抓了一大包花生出来,让大家玩一个分花生的游戏,游戏规则如下:

桌子上放着两堆花生,Player1和Player2轮流对这些花生进行操作。在每一次操作中,操作者需要吃掉其中一堆花生,并且把另一堆花生分成两堆(可以不相等)留给对方操作。游戏如此进行下去,花生数会越来越少,最后必将出现这样一种情况:某人吃掉一堆花生后发现另一堆里只剩一颗花生不能再分了。游戏规定此时该操作者吃掉最后这一颗花生从而取胜。
起初Nicholas的队员轮流挑战小谭,可是全部都很遗憾的落败了,旁边的杨老师实在看不下去了便提醒队员们这个游戏是不公平的,对于任意一种初始状态,总有一方有必胜策略。所谓有必胜策略是指,无论对方如何操作,自己总有办法取胜。
现在将进行10次游戏,每一次游戏中总是小谭先进行操作。现在你的任务就是帮助Nicholas的队员们设计一个程序来判断每一次游戏中Nicholas的队员是否有必胜策略。(假设小谭和队员们都是用最优的方式在进行操作)。

 

Input

 

输入数据一共10行,每行有两个用空格隔开的正整数m,n( 0 < m,n < 100000 ),表示一次游戏开始时桌子上两堆糖果分别有多少个。

 

Output

 

输出十行字符串。这些字符串只能是“Yes”或“No”,它们表示对应的十行输入数据Nicholas的队员是否有必胜策略。请注意大小写。

 

Sample Input

 

1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5

 

Sample Output

 

 No
No
No
No
No
No
Yes
Yes
No
No

 分析:

首先很容易分析出:

含有1,必胜
2、3,必败
4=2+2,必胜
5=2+3,必胜
6=3+3,必胜
7=1+6|2+5|3+4,必败
8=1+7|2+6|3+5|4+4,必败
9=2+7,必胜

~~~~~~~~~~

可见,由两个必败点之和的点一定是必胜点

所以只需找出这十对数的最大值之前的必胜点就行,如果小谭面对的都是必败点就"Yes",否则"No"

代码如下:

# include<stdio.h>
# include<string.h>
int Map[10][2], sign[100005];
int Max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    int i, j, MaxSize = 0;
    for(i = 0; i < 10; i++)
    {
        scanf("%d %d", &Map[i][0], &Map[i][1]);
        MaxSize =Max(MaxSize, Max(Map[i][0], Map[i][1]));//找出十对数中最大的数
    }
    for(i = 0; i <= MaxSize; i++)//memset(sign,-1,sizeof(sign));
    {
        sign[i] = -1;
    }
    sign[1] = 1;
    sign[2] = 0;
    sign[3] = 0;
    for(i = 1; i <= MaxSize; i++)
    {
        if(sign[i] != 1)
        {
            sign[i] = 0;
            for(j = i; j <= MaxSize - i; j++)//i+j的最大值不超过MaxSize,则j<= MaxSize-i
            {
                if(sign[j] == 0)
                {
                    sign[i+j] = 1;//两个必败点和的点一定是必胜点
                }
            }
        }
        
    }
    for(i =0; i < 10; i++)
    {
        if(!sign[Map[i][0]] && !sign[Map[i][1]])
            printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

 

posted on 2012-11-01 17:11  即为将军  阅读(733)  评论(2)    收藏  举报

导航