尼姆博奕hdu1536Nim

来源:互联网 发布:12306显示网络有问题 编辑:程序博客网 时间:2024/06/08 11:32

sg函数打表的基础应用,第一道ac的sg函数打表题纪念下,直接上代码:

hdu1536题目连接

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define maxn 100 7 using namespace std; 8 #define N 10000 9 int k,visit[N],f[N],sg[N],nu;10 void getsg(int n)11 {12     int i,j;13     //memset(sg,0,sizeof(sg));14     for(i=0;i<=n;i++)15     {16         //memset(visit,0,sizeof(visit));17         for(j=0;j<=100;j++)18         visit[j]=0;19         for(j=0;j<nu;j++)20         if(i>=f[j])visit[sg[i-f[j]]]=1;21         else break;22         for(j=0;j<=n;j++)23         {24             if(!visit[j])25             {26                 sg[i]=j;27                 break;28             }29         }30     }31 }32  int main()33  {34      int i,j,ans,n,m;35      while(scanf("%d",&nu)&&nu)36     {37         for(i=0;i<nu;i++)38         scanf("%d",&f[i]);39         sort(f,f+nu);40         scanf("%d",&k);41         getsg(10000);42 43         while(k--)44         {45             ans=0;46             scanf("%d",&m);47 48 49                 for(i=1;i<=m;i++)50                 {51                     scanf("%d",&n);52                     ans^=sg[n];53                 }54                 if(ans==0)55                 printf("L");56                 else57                 printf("W");58 59         }60          printf("\n");61     }62     return 0;63  }