link

题目大意

有一 W × H W\times H W×H 的矩阵,两人博弈,每次可以沿网格水平切割或竖直切割,当切割后出现 1 × 1 1\times 1 1×1 的格子则获胜。给定 W , H ( 1 ≤ W , H ≤ 200 ) W,H(1\le W,H\le 200) W,H(1≤W,H≤200),问先手必胜还是必败。

题解

博弈论。

显然必胜还是必败只跟当前矩阵的长宽有关,记忆化直接求 sg 函数值。

s g ( w , h ) = m e x { s g ( i , h ) ⊕ s g ( w − i , h ) , s g ( w , j ) ⊕ s g ( w , h − j ) } sg(w,h)=mex\{ sg(i,h)\oplus sg(w-i,h),sg(w,j)\oplus sg(w,h-j)\} sg(w,h)=mex{sg(i,h)⊕sg(w−i,h),sg(w,j)⊕sg(w,h−j)}

但是直接写会挂。

考虑 1 × 1 1\times 1 1×1 格子这个胜利条件。显然,当一方出现 1 × x 1\times x 1×x 或 x × 1 x\times 1 x×1 的矩阵后,一次就能切出 1 × 1 1\times 1 1×1 从而获胜。所以肯定不会让对方出现这两个局面,也即切割时不能切出长或宽为 1 1 1 的矩阵。注意这点即可 AC.

时间复杂度 O ( n 2 ) O(n^2) O(n2).

代码

#include <cstdio>
#include <cstring>
using namespace std;
int n, m, sg[205][205];
int getsg(int w, int h) {if (w == 1 && h == 1) return sg[w][h] = 0;if (sg[w][h] != -1) return sg[w][h];int mex[205];memset(mex, 0, sizeof(mex));for (int i = 2; i <= w / 2 && w - i >= 2; i++) mex[getsg(i, h) ^ getsg(w - i, h)] = 1;//w/2为了加快速度for (int i = 2; i <= h / 2 && h - i >= 2; i++) mex[getsg(w, i) ^ getsg(w, h - i)] = 1;for (int i = 0; i <= 200; i++)if (!mex[i]) {sg[w][h] = i;break;}return sg[w][h];
}
int main() {memset(sg, -1, sizeof(sg));while (scanf("%d%d", &n, &m) != EOF) {if (getsg(n, m)) printf("WIN\n");else printf("LOSE\n");}return 0;
}

END

【题解】POJ2311 Cutting Game相关推荐

  1. [poj2311]Cutting Game_博弈论

    Cutting Game poj-2311 题目大意:题目链接 注释:略. 想法: 我们发现一次操作就是将这个ICG对应游戏图上的一枚棋子变成两枚. 又因为SG定理的存在,记忆化搜索即可. 最后,附上 ...

  2. 【题解】Cutting Woods

    题目链接https://vjudge.csgrandeur.cn/contest/486840#problem/E 题意很简单,给我们一个长度为N的区间,有M次询问,每次询问是两种操作之一:1.在x坐 ...

  3. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)

    白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...

  4. 博弈论探讨及题目总结

    转载自爱神博客:http://blog.csdn.net/acm_cxlove/article/details/7854526 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://bl ...

  5. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  6. 博弈论——公平组合游戏与SG函数

    参考自算法竞赛进阶指南 公平组合游戏与有向无环图 一个博弈游戏被称为公平组合游戏(ICG)当且仅当其同时满足3个条件 由两名玩家交替行动 游戏任意时刻可进行的操作与轮到哪名玩家无关 不能进行操作的玩家 ...

  7. UVA 818 Cutting Chains(状压 + 暴搜)题解

    题意:有1~n个小环,他们中的有些互相扣在一起,问你至少切开几个能把这写小环串成一条链 思路:还是太菜了,题目给的n<=15,显然可以暴力解决. 用二进制表示每个环切还是不切,然后搜索所有情况. ...

  8. 小白题解 Codeforces 794B Cutting Carrot

    (水题)题目链接:点击打开链接 题目大意:给定一个三角形,底始终为1,高h,用平行于底边的线将它分成面积相等的n份,分别求第i份的底边到大三角形定点的距离. 分析:设第i份对应高为Y,由每份面积相等可 ...

  9. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

最新文章

  1. 项目上线与LOG记录
  2. .NET Core 中如何在运行中加载 Controller ?
  3. SAP ABAP实用技巧介绍系列之将unicode字符转换成中文
  4. Python运算符优先级
  5. OpenCV-Python入门教程7-PyQt编写GUI界面
  6. HTTP中302与301的区别以及在ASP.NET中如何实现
  7. iOS 10 (X8)上CoreData的使用(包含创建工程时未添加CoreData)
  8. pythonpandas设置索引_pandas DataFrame的修改方法(值、列、索引)
  9. 在线短视频缩略图剪切工具
  10. 解决Linux操作系统下SSH等终端乱码问题
  11. 编译OpenJDK8:Your cygwin is too old. You are running but at least cygwin 1.7 is required
  12. 牛客网 牛客小白月赛1 A.简单题-控制输出格式setiosflags()函数+setprecision()函数
  13. 国际C语言混乱代码大赛 获奖作品
  14. 正则表达式数字匹配规则整理
  15. 计算机表格的条件公式,电脑Excel输出时如何进行多条件判断
  16. 微信小程序在 wxml 文件中使用 Array.includes 方法
  17. Linux系统安装jdk11
  18. ReactNative打Release生产包报错error: failed parsing overlays
  19. python win32 excel转pdf
  20. orc识别较慢_关于半自动标注工具PPOCRLabel运行速度由快逐渐变慢的问题

热门文章

  1. 千万级数据导出Excel
  2. 【NLP】python中英文关键词抽取技术总结
  3. Mac下安装终端工具,可使用终端下载软件
  4. C语言之基本数据类型
  5. 控制文件oracle controlfile structure
  6. Python猴子摘桃
  7. 20230516我的创作纪念日
  8. jdk8新特性-枚举-正则
  9. ios企业签名在线签名网站有哪些?
  10. 2006-京淘Day20