hdu 1849 Rabbit and Grass SG定理(简单博弈)

来源:互联网 发布:51单片机视频教程 编辑:程序博客网 时间:2024/05/21 22:48
#include <cstdio>#include <cstring>#include <cmath>#include <map>#include <queue>#include <stack>#include <iostream>#include <algorithm>using namespace std;const int maxn=1010;int a;int main(){    int n;    while(cin>>n)    {        if(n==0)break;        int i,ans=0;        for(i=0;i<n;i++)        {            cin>>a;            ans^=a;        }        if(ans==0)cout<<"Grass Win!"<<endl;        else cout<<"Rabbit Win!"<<endl;    }    return 0;}/*    简单博弈(组合游戏)    用SG定理解,求得Nim和就OK了,和hdu 1850差不多    sg值先写个程序打表,找下规律,得出sg[i]=i;*/


sg值打表:

#include <cstdio>  #include <cstring>  #include <cmath>  #include <map>  #include <queue>  #include <stack>  #include <iostream>  #include <algorithm>  using namespace std;  const int maxn=1e3+10;  int sg[maxn],vis[maxn];  void init()  {      int i,j;      sg[0]=0;      for(i=1;i<=100;i++)      {          memset(vis,0,sizeof(vis));          for(j=0;j<i;j++)              vis[sg[j]]++;          for(j=0;;j++)              if(!vis[j]){sg[i]=j;break;}      }      for(i=1;i<=100;i++)          cout<<sg[i]<<endl;  }  int main()  {      init();  }


原创粉丝点击