首页 > 其他分享 >【小记】SG函数

【小记】SG函数

时间:2022-10-31 08:34:17浏览次数:87  
标签:局面 函数 SG 值为 后继 游戏 sg operatorname 小记

记号说明:\([2^k]x\) 表示数 \(x\) 在二进制下第 \(k\) 位(采用这个记号是来自于形式幂级数中记号 \([x^k]f(x)\) 的启发)。

规定游戏如下:给定初始局面,两个人轮流操作,每次使当前局面走到某一个后继局面(局面后继关系图给定,且是 DAG),若没有后继局面则失败(将没有后继局面的局面称为直接必败局面)。

为游戏的每个局面定义一个 \(\operatorname{sg}\) 值,使得对于任意局面 \(u\),设其 \(\operatorname{sg}\) 值为 \(x\),满足:

  • \(u\) 一定能走到任意 \(\operatorname{sg}\) 值小于 \(x\) 的后继局面。
  • \(u\) 一定不能走到 \(\operatorname{sg}\) 值为 \(x\) 的后继局面。
  • \(u\) 可能可以走到某些 \(\operatorname{sg}\) 值大于 \(x\) 的后继局面。

且满足:直接必败局面的 \(\operatorname{sg}\) 值为 \(0\)。

考虑从直接必败局面开始,反向递推每种局面的 \(\operatorname{sg}\) 值。

发现每个局面的 \(\operatorname{sg}\) 值一定恰好为其所有后继局面 \(\operatorname{sg}\) 值的 \(\operatorname{mex}\)。

称一个游戏是由 \(n\) 个子游戏构成的,当且仅当:对于该游戏的任意局面,可以将其看成是 \(n\) 个子游戏各自的局面组成的 \(n\) 元组,且其所有可能的后继局面恰为 “将 \(n\) 个子游戏中的某一个的局面替换为其后继局面” 所形成的所有可能的后继局面。

对于一个由 \(n\) 个子游戏构成的游戏,其每个局面的 \(\operatorname{sg}\) 值为所有子游戏对应的局面的 \(\operatorname{sg}\) 值的异或和。

证明:只需证明其满足 \(\operatorname{sg}\) 值所需满足的条件即可(因为 \(\operatorname{sg}\) 值的唯一性已经说明过了)。

若令游戏的每个局面的 \(\operatorname{sg}\) 值为其所有子游戏对应的局面的 \(\operatorname{sg}\) 值的异或和:

对于游戏的任意一个局面 \(u\),设其 \(\operatorname{sg}\) 值为 \(x\),设每个子游戏对应局面的 \(\operatorname{sg}\) 值分别为 \(x_1,\cdots,x_n\),那么 \(x_1\oplus\cdots\oplus x_n=x\)。

  • 对于任意 \(y<x\),\(u\) 一定能走到 \(\operatorname{sg}\) 值为 \(y\) 的后继局面:只需证明存在一个 \(i\) 使得 \(x_i\oplus(x\oplus y)<x_i\) 即可。

    由于 \(y<x\),所以找到最高位 \(k\) 使得 \([2^k]x\neq [2^k]y\),那么 \([2^k]x=1\) 而 \([2^k]y=0\)。可以发现 \((x\oplus y)\) 的最高位也应是第 \(k\) 位。

    又由于 \([2^k]x=1\),所以一定存在 \(i\) 使得 \([2^k]x_i=1\),那么此时一定有 \(x_i\oplus(x\oplus y)<x_i\)。

  • \(u\) 一定不能走到 \(\operatorname{sg}\) 值为 \(x\) 的后继局面:这要求存在某个子游戏 \(i\) 的局面有 \(\operatorname{sg}\) 值等于 \(x_i\) 的后继局面。

  • \(u\) 可能可以走到某些 \(\operatorname{sg}\) 值大于 \(x\) 的后继局面:这甚至不能称得上是条件,它显然成立。

而对于任意直接必败局面,容易发现其 \(\operatorname{sg}\) 值为 \(0\)。

证毕。

从而,对于一个游戏,若它是由 \(n\) 个子游戏构成的,我们可以直接令其每个局面的 \(\operatorname{sg}\) 值为所有子游戏对应的局面的 \(\operatorname{sg}\) 值的异或和。

我们现在来证明,一个局面是先手必胜的,当且仅当它的 \(\operatorname{sg}\) 值大于 \(0\)。

好吧这个证明十分简单,我们略去(

从而,我们基本完成了 sg 函数的基础框架的构建。更深入的等遇到了再补吧。

标签:局面,函数,SG,值为,后继,游戏,sg,operatorname,小记
From: https://www.cnblogs.com/ez-lcw/p/16843019.html

相关文章

  • SQL函数大全汇总
    SQL中包含以下七种类型的函数:一、聚合函数聚合函数:返回汇总值(它对其应用的每个行集返回一个值)AVG(表达式)返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。CO......
  • 函数的常见样式/声明(C++/C)
      ============1.无参无返:  2.有参无返:  3.无参有返:  4.有参有返:  _____________________________________________________________________......
  • 10.30 小记
    感觉咕了好久,晚上补一点。真就重学是吧。[ARC068F]Solitaire首先存在的性质就是队列中一定是先单调递减后单调递增的序列。首先就是取\(k\)次后中间剩下的,可以随便......
  • 自定义函数
    今天学了自定义函数,在梦函数之前定义一个函数,然后就可以在main之中使用该函数,对于要多次使用相同结构,来说自定义一个函数会方便很多。像这种自定义阶乘函数......
  • 【笔记09】Javascript - 函数 - 闭包
    【笔记09】Javascript-基本概念-(闭包)内部函数被return 到外部。functiona(){functionb(){varbbb=234;console.log(aaa);}varaaa=......
  • vue3 reactive函数
    reactive的用法与的用法相似,也是将数据变成响应式数据,当数据发生变化时也会自动更新。不同的是用于基本数据类型,而是用于复杂数据类型,比如对象和数组例如:定义一个对象类型......
  • java spring项目中使用设计模式和函数式编程的思想去除业务逻辑中的if else判断
    如果你开发项目时对项目之后的发展很清晰但仍陷入了为什么要用设计模式替换ifelse的疑问时就说明你项目的体量不需要用设计模式答案只在问题提出之后有意义策略和状......
  • 【XSY3804】QQ数(莫比乌斯函数,容斥)
    题面题解明显地,这个QQ数可以用\(\mu\)表示,于是询问就变成了这样:\[\begin{aligned}&\sum_{i=1}^n\sum_{d|i}\left(1-\mu(d)^2\right)\\=&\sum_{d=1}^n\left\lfloo......
  • 【UOJ424】count(笛卡尔树,DP,生成函数,矩阵快速幂)
    首先可以发现两个序列\(A,B\)同构当且仅当它们的笛卡尔树同构。那么可以考虑枚举笛卡尔树,然后判断它能否构成满足题目条件的序列。发现一棵笛卡尔树满足条件当且仅当它......
  • 0084-Go-函数
    环境Time2022-08-23Go1.19前言说明参考:https://gobyexample.com/functions目标使用Go语言的函数。定义函数funcplus(aint,bint)int{returna+......