您当前的位置: 首页 > 

HeartFireY

暂无认证

  • 4浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[SG函数]Split Game(2020江西省大学生程序设计竞赛)

HeartFireY 发布时间:2022-02-13 19:25:40 ,浏览量:4

一开始有一个 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             
关注
打赏
1662600635
查看更多评论
0.2111s