题目链接

一个n行20列的棋盘。 每一行有若干个棋子。 两人轮流操作, 每人每次可以将一个棋子向右移动一个位置, 如果它右边有一个棋子, 就跳过这个棋子, 如果有若干个棋子, 就将这若干个都跳过。 但是棋子不能移出边界。

如果没有办法移动了, 就算输。 问你先走的能否赢。

只有20列, 所以预处理出所有状态的sg值。 然后直接异或就好了。

然后sg[(1<<20)-1] = 0, 这是必输态, 其他的都可以dfs出来, 具体看代码。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define pb(x) push_back(x)
  5. #define ll long long
  6. #define mk(x, y) make_pair(x, y)
  7. #define lson l, m, rt<<1
  8. #define mem(a) memset(a, 0, sizeof(a))
  9. #define rson m+1, r, rt<<11
  10. #define mem1(a) memset(a, -1, sizeof(a))
  11. #define mem2(a) memset(a, 0x3f, sizeof(a))
  12. #define rep(i, n, a) for(int i = a; i<n; i++)
  13. #define fi first
  14. #define se second
  15. typedef pair<int, int> pll;
  16. const double PI = acos(-1.0);
  17. const double eps = 1e-;
  18. const int mod = 1e9+;
  19. const int inf = ;
  20. const int dir[][] = { {-, }, {, }, {, -}, {, } };
  21. int sg[<<];
  22. int mex(int x)
  23. {
  24. if(~sg[x])
  25. return x;
  26. bool vis[];
  27. memset(vis, false, sizeof(vis));
  28. for(int i = ; i < ; i++) {
  29. if(((<<i)&x)== && ((<<(i+))&x)) {
  30. int j;
  31. for(j = i + ; j < ; j++) {
  32. if(!(<<j&x))
  33. break;
  34. }
  35. for(int k = i+; k <= j; k++) {
  36. int sta = x^(<<i)^(<<k);
  37. if(sta>=(<<))
  38. break;
  39. mex(sta);
  40. vis[sg[sta]] = ;
  41. }
  42. }
  43. }
  44. for(int i = ; i < ; i++)
  45. if(!vis[i])
  46. return sg[x] = i;
  47. }
  48. void init()
  49. {
  50. mem1(sg);
  51. sg[(<<)-] = ;
  52. for(int i = ; i < (<<); i++) {
  53. if(sg[i] == -) {
  54. mex(i);
  55. }
  56. }
  57. }
  58. int main()
  59. {
  60. init();
  61. int t, n, m, x;
  62. cin>>t;
  63. while(t--) {
  64. cin>>n;
  65. int ans = ;
  66. for(int i = ; i < n; i++) {
  67. scanf("%d", &m);
  68. int sta = ;
  69. while(m--) {
  70. scanf("%d", &x);
  71. sta |= (<<(-x));
  72. }
  73. ans ^= sg[sta];
  74. }
  75. if(ans) {
  76. puts("YES");
  77. } else {
  78. puts("NO");
  79. }
  80. }
  81. }

hdu 5724 Chess 博弈的更多相关文章

  1. hdu 5724 Chess 博弈sg+状态压缩

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem De ...

  2. HDU 5724 Chess(国际象棋)

    HDU 5724 Chess(国际象棋) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  3. HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场

    题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...

  4. HDU 5724 Chess (sg函数)

    Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5724 Description Alice and Bob are playing a s ...

  5. HDU 5724 Chess(博弈论)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5724 [题目大意] 给出一个n行,每行有20格的棋盘,棋盘上有一些棋子,每次操作可以选择其中一个棋 ...

  6. HDU 5724 Chess(SG函数+状态压缩)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5724 题意: 现在有一个n*20的棋盘,上面有一些棋子,双方每次可以选择一个棋子把它移动到其右边第一 ...

  7. HDU 5724 Chess(SG函数)

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  8. HDU 5724 - Chess

    题意:    一个n行20列的棋盘. 每一行有若干个棋子.     两人轮流操作, 每人每次可以将一个棋子向右移动一个位置, 如果它右边有一个棋子, 就跳过这个棋子, 如果有若干个棋子, 就将这若干个 ...

  9. HDU 5724:Chess(博弈 + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5724 Chess Problem Description   Alice and Bob are playing ...

随机推荐

  1. CentOS用gparted实现无损调整磁盘分区大小

    作者: sheldon 测试服务器硬盘挂载在/usr下的分区大小只有10G,随着必须软件都安装在这个目录下,这个分区已经满额,给分区扩容刻不容缓,window下有PQ分区工具,Linux下也有gpar ...

  2. I/O浅析

    1.为什么需要I/O? 因为程序需要从别的文件中获取内容或者程序要将自身的内容传入到文件中. 2.流种类的概述 1.字节流和字符流 字节流的基础单位是byte                  字符流 ...

  3. 【转】Logistic regression (逻辑回归) 概述

    Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等 ...

  4. SEO高手在扯蛋?

    真正的高手SEO你在扯蛋吗?当大家都很会扯的时候,高手扯得肯定比你疼,不是他们 蛋比较敏感,而是他们的确更用力. 当你说我是SEO时,高手肯定说现在我在做的是SEM. 当你说我是SEM时,高手肯定在说 ...

  5. omnibus方式部署gitlab

    omnibus方式部署gitlab Posted on 2015 年 1 月 10 日   4233 Views 这几天折腾搭建git服务器,选择了比较流行的gitlab,一开始就直奔一键安装脚本去了 ...

  6. aix rksh 执行CLI命令行限制

    su padmin -C "lsdev -dev hdisk9 -attr| grep unique_id"rksh: lsdev: 0403-006 Execute permis ...

  7. 原生网络请求以及AFN网络请求/异步下载

    这里对网络请求方式做一个总结. 原生方式同步GET请求: NSString *urlStr = @"http://apis.juhe.cn/mobile/get?phone=13429667 ...

  8. oracle实例名,数据库名,服务名等概念差别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令非常多刚開始学习的人easy混淆的概念.相信非常多刚開始学习的人都与我一样被标题上这些个概念搞得一头雾水.我们如今就来把它们弄个明确. 一 ...

  9. 项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors

    背景 通过做以下一个小的接口系统gate,了解一下mina和java并发包里的东西.A系统为javaweb项目,B为C语言项目,gate是本篇须要完毕的系统. 需求 1. A为集群系统,并发较高,会批 ...

  10. C语言中一些非常酷的技巧(cool tricks)

    来自Quora,认为不错,就实践了一下. 1.  #if 0 ...... #endif 块中的内容不会被编译,由于凝视不同意嵌套,我们能够把临时不用的代码块放在 这里面. 2. 数组初始化的时候能够 ...