hdu 3980

来源:互联网 发布:微商拍小视频的软件 编辑:程序博客网 时间:2024/05/29 16:19

由 SG 定理,子游戏sg值的亦或就是全局的sg值,也就是SG(len-m)=SG(x)^SG(len-x-m) ,dfs中枚举当前玩家涂颜色的起

代码参考了http://blog.csdn.net/fobdddf/article/details/21638771

    #include <iostream>      #include <cstring>            using namespace std;            const int MAX_N = 1000 + 10;      int T,n,m;      int p[MAX_N];            int get_sg(int len)      {          if(p[len] != -1)              return p[len];          if(len < m)              return p[len] = 0;          int vis[MAX_N];          memset(vis,0,sizeof(vis));          for(int i = 0;len - m - i >= 0;i++)              vis[get_sg(i) ^ get_sg(len - i - m)] = 1;          for(int i = 0;i < MAX_N;i++)              if(vis[i] == 0)                  return p[len] = i;      }      int main()      {          cin >> T;          int _count = 0;          while(T--)          {              memset(p,-1,sizeof(p));              cin >> n >> m;              cout << "Case #" << ++_count << ": ";              if(n < m || get_sg(n - m))                cout << "abcdxyzk" << endl;              else                  cout << "aekdycoin" << endl;          }          return 0;      }  

点,记忆化搜索。
原创粉丝点击