天天写算法之Rabbit and Grass(SG打表)

地址: 点击打开链接
依旧是一个模板题,只不过需要转换一下就可以了

代码如下

#include<iostream>
#include<cstdio>
#include<string.h>
#include<stack>
#include<queue>
#include<queue>
using namespace std ;
#define MAX 1001
int f[MAX];
int sg[MAX];
int Hash[MAX];

void getSG(int n )
{
    int i ,j ;
    memset(sg,0,sizeof(sg));
    for(i = 1 ; i <=MAX ; i++)
    {
     memset(Hash,0,sizeof(Hash));
     for(j = 1 ; f[j]<=i;j++)
     {
         Hash[sg[i-f[j]]]=1;
     }
     for(j = 0 ; j<=n ; j ++)
     {
         if(Hash[j]==0)
         {
             sg[i]=j;
             break ;
         }
     }
    }
}
int main()
{
    int i ,m, n , p ,num,a,b;
    for(i=1 ; i <MAX ; i++)
    {
        f[i]=i;
    }
    getSG(MAX);
    while(scanf("%d",&num)!=EOF&&num)
    {
        int res ;
       if(num==1)
       {
           scanf("%d",&a);
           res = sg[a];
       }else {
            scanf("%d%d",&a,&b);
            res = sg[a]^sg[b];
       }
        for(i=3 ; i <=num ; i ++)
        {
            scanf("%d",&n);
            res = res^sg[n];
        }
        if(res)
        {
             printf("Rabbit Win!\n");
        }else {
             printf("Grass Win!\n");
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/80179034