一开始有一个 n × m n \times m n×m的纸,之后随着游戏的进行,会得到多张不同大小的网格纸,这样就可以记一张纸为一个游戏,各个游戏构成一个游戏的和。其中每一个游戏都是一个有向图游戏,不过我们要自己找到不能行动的局面。显然 1 ∗ 2 1*2 1∗2与 1 ∗ 3 1*3 1∗3( 2 ∗ 1 2*1 2∗1和 3 ∗ 1 3*1 3∗1同理)无法再次分割,且其他矩形均可以分割成这两者之一,因此选取这两个局面作为必败局面。
对于一张 N × M N \times M N×M的矩形网格纸,我们可以枚举如何行动,然后得到两个子游戏,对两子游戏 S G SG SG值进行异或运算,就得到了裁剪后局面对应的SG值。对所有裁剪后局面的 S G SG SG值进行 m e x mex mex运算(将所有值记作一个集合,返回集合内不存在的最小的数)即可得到当前这张纸的SG值。
注意要避开 1 × 1 1 \times 1 1×1的局面
#include
#define int long long
using namespace std;
#define win cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?