一直没学结果今天被创了。

一些定义:

  • \(\text{mex}\{S\}\):集合 \(S\) 中最小的没有出现过的非负整数。
  • \(\oplus\):按位异或。也叫做 \(\text{xor}\)。

博弈状态

  • 定义 P-position 为“必胜态”,即 positive-position,简称 P。某个玩家到达该状态则一定胜。
  • 定义 N-position 为“必败态”,即 negative-position,简称 N。某个玩家到达该状态则一定败。
  • 定义某个状态的”后继状态”当前玩家从当前状态进行一次操作能够到达的状态集合。
  • 一个状态为 P,当且仅当其后继状态存在至少一个必败状态。
  • 一个状态为 N,当且仅当其后继状态全部都是必胜状态。

博弈图

  • 将每个状态向其后继状态连边,每条边表示转移,形成一个有向无环图称为博弈图。

SG 函数

  • 定义有向图游戏上的函数 \(\mathrm{SG}(x)\)。对于 \(x\) 的后继状态 \(S\),有 \(\mathrm{SG}(x) = \mathrm{mex} \{y \in S :\mathrm{SG(y)}\}\)。对于必败态定义其 \(\mathrm{SG}\) 为 \(0\)。

  • 在有向图游戏中,\(\mathrm{SG}\) 是容易递推求出的。

SG 定理

  • 对于有 \(n\) 个起点的有向图游戏,设他们的起点分别为 \(s_1, s_2 \cdots s_n\),则有:当且仅当 \(\oplus_{i \le n} \mathrm{SG}(s_i) \ne 0\),该游戏先手必胜。
  • 不会定理的证明/ll

尼姆游戏(Nim 游戏)

  • 又称取石子游戏。有 \(n\) 堆石子,每一堆有 \(a_i\) 个。两个人以最优策略轮流取,不能操作的失败。求先手必胜还是必败。
  • 我们将 Nim 游戏转化称有向图游戏。发现每一堆是相互独立的。将每一堆建成有向无环图,节点 \(x\) 连向 \(y\) 当且仅当 \(y < x\)。不难发现 \(\mathrm{SG}(x) = x\)。根据 SG 定理,先手必胜当且仅当 \(\oplus_{i \le n} a_i \ne 0\)。

SG 函数的应用

  • 例 1:UVA1482 Playing With Stones:仍然是取石子游戏,但是每次取的个数有限制,从每次随便取,变成每次取不超过每堆的一半。

    我们通过打表观察 \(\mathrm{SG}\) 函数,可以发现一些规律:

    • 若 \(n \bmod 2 = 0\),则 \(\mathrm{SG}(n) = n / 2\)。
    • 若 \(n \bmod 2 = 1\),则 \(\mathrm{SG}(n) = (n - 1) / 4\)。
    • 若 \(n \bmod 2 = 1\),则 \(\mathrm{SG}(n) = \mathrm{SG}((n - 1) / 2)\)。

将每一堆的 SG 异或起来。复杂度 \(O(n \log V)\)。

  • 例 2:台阶-Nim 游戏:还是取石子,但是石子放在台阶上,每次可以从上面的台阶上拿下来若干个放到下面的台阶上去。放到地上的不能再动。求先手必胜还是必败。

    可以将该问题等价为奇数位置的石子组成的尼姆游戏。我们考虑,设该游戏的 SG 值为奇数位置的石子个数的亦或和。如果先手下,先手一定可以移动石子使得 SG 变为 \(0\)。否则,后手无论怎么移动,先手可以将他移动个数相同多的石子移动到下一级,让 \(\mathrm{SG} = 0\) 的状态转移给后手。

[笔记]博弈论 & SG 函数的更多相关文章

  1. 【基础操作】博弈论 / SG 函数详解

    博弈死我了……(话说哪个小学生会玩博弈论提到的这类弱智游戏,还取石子) 先推荐两个文章链接:浅谈算法——博弈论(从零开始的博弈论) 博弈论相关知识及其应用 This article was updat ...

  2. POJ2425 A Chess Game[博弈论 SG函数]

    A Chess Game Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3917   Accepted: 1596 Desc ...

  3. bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 973  Solved: 599[Submit][Status ...

  4. [BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】

    题目链接:BZOJ - 1188 题目分析 我们把每一颗石子看做一个单个的游戏,它的 SG 值取决于它的位置. 对于一颗在 i 位置的石子,根据游戏规则,它的后继状态就是枚举符合条件的 j, k.然后 ...

  5. [BZOJ 1874] [BeiJing2009 WinterCamp] 取石子游戏 【博弈论 | SG函数】

    题目链接:BZOJ - 1874 题目分析 这个是一种组合游戏,是许多单个SG游戏的和. 就是指,总的游戏由许多单个SG游戏组合而成,每个SG游戏(也就是每一堆石子)之间互不干扰,每次从所有的单个游戏 ...

  6. 【GZOI2015】石子游戏 博弈论 SG函数

    题目大意 有\(n\)堆石子,两个人可以轮流取石子.每次可以选择一堆石子,做出下列的其中一点操作: 1.移去整堆石子 2.设石子堆中有\(x\)个石子,取出\(y\)堆石子,其中\(1\leq y&l ...

  7. [2016北京集训试题6]魔法游戏-[博弈论-sg函数]

    Description Solution 首先,每个节点上的权值可以等价于该节点上有(它的权的二进制位数+1)个石子,每次可以拿若干个石子但不能不拿. 然后就发现这和NIM游戏很像,就计算sg函数em ...

  8. JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi

    http://172.20.6.3/Problem_Show.asp?id=1540 之前莫比乌斯反演也写了一道这种找规律分块计算的题,没觉得这么恶心啊. 具体解释看代码. 翻硬币的具体方法就是分别算 ...

  9. 2016多校联合训练1 B题Chess (博弈论 SG函数)

    题目大意:一个n(n<=1000)行,20列的棋盘上有一些棋子,两个人下棋,每回合可以把任意一个棋子向右移动到这一行的离这个棋子最近的空格上(注意这里不一定是移动最后一个棋子),不能移动到棋盘外 ...

  10. POJ 2960 S-Nim 博弈论 sg函数

    http://poj.org/problem?id=2960 sg函数几乎是模板题. 调试代码的最大障碍仍然是手残在循环里打错变量名,是时候换个hydra产的机械臂了[超想要.jpg] #includ ...

随机推荐

  1. 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引

    在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,在第37条中建议 用EnumMap替换序数索引,为什么? EnumSet 在EffectiveJava中的第 36条中 ...

  2. [OI] 莫比乌斯函数与莫比乌斯反演

    9. 莫比乌斯函数与莫比乌斯反演 9.1 莫比乌斯函数 9.1.1 定义 设 \(\mu\) 为莫比乌斯函数,则有: \[\mu(x)=\begin{cases}1\qquad (n=1)\\ 0\q ...

  3. 一款基于Uniapp开发的开源低代码平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...

  4. war3辅助代码及运行方式

    打开VS2019 点这个 自动生成这么一堆代码,全删了,就剩这些就行 然后点这里 然后向CPP里粘贴以下代码 #include "tlhelp32.h" HANDLE hwnd = ...

  5. Android 基于 Choreographer 的渲染机制详解

    本文介绍了 App 开发者不经常接触到但是在 Android Framework 渲染链路中非常重要的一个类 Choreographer.包括 Choreographer 的引入背景.Choreogr ...

  6. 2022年8月中国数据库排行榜:openGauss重夺榜眼,PolarDB反超人大金仓

    "烈日杲杲,夺榜愈烈." 2022年8月的 墨天轮中国数据库流行度排行榜 火热出炉,8月排行榜共有236个数据库参与排名.本月榜单前十名的变化可以用"两反超"来 ...

  7. 前端 面试 html css 如何让一个盒子水平垂直居中?

    方法1  使用子绝父相 定位  推荐 说明: 让父元素相对定位,因为要让子元素以父元素为参考对象,如果父元素不设置定位,子元素的参考对象就是整个页面document: 子元素绝对定位,top:50%: ...

  8. 09-react的组件传值 props

    // 组件传值 props 接收传递过来的数据 import ReactDom from "react-dom" import { Component } from "r ...

  9. 使用 vue2 + element-ui 登录的时候的逻辑

    1. 自动校验表单逻辑 // 1. 自动表单验证 try { // 这个形式自动表单验证麻烦 // this.$refs.loginForm.validate((valid)=>{ ... }) ...

  10. 云原生周刊:Kubernetes v1.30 发布 | 2024.4.22

    开源项目推荐 pv-migrate pv-migrate 是一个 CLI 工具/kubectl 插件,可轻松将一个 Kubernetes 的内容迁移 PersistentVolumeClaim 到另一 ...