首页 > 其他分享 >OI 博弈论若干模型总结(Genshing)

OI 博弈论若干模型总结(Genshing)

时间:2024-01-22 14:59:35浏览次数:35  
标签:approx 游戏 OI 必败 博弈论 证明 Genshing mathcal SG

OI博弈论的若干模型

OI 不是知识竞赛。

平等博弈是完全信息的(知道双方目标及操作收益),交替行动的,知道当前局面和转移的,平等(决策和当前状态操作者无关)的。

不平等博弈和上面一致,但是有一方更加平等。

所有的平等博弈都可以化为 DAG 上的移动游戏。

公平组合游戏是无法行动者败的游戏。这样的游戏每个状态具有结果类 \(\mathcal{N,P}\),分别代表先手必胜和先手必败。

若干简单游戏

DAG 上的移动游戏

有一张有向无环图, 其中一个节点上有一个棋子. 从 Alice 开始游戏, Alice 和 Bob 轮流将这个棋子沿着一条有向出边移动, 无法移动者判负. 问最后谁会获胜。

注意到这是一个平等博弈, 于是只用考虑先手必胜/必败. 于是按照拓扑排序的方式递推出当前棋子在每个节点时对应先手必胜/先手必败即可。

Ferguson Game

有两堆石子分别 \(n,m\) 个, 双人博弈, 每次操作是清空其中一堆石子并将另一堆石子分成任意非空的两堆新的石子. 无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(2\not\mid n,m\),可以归纳证明。

Chomp Game

有一个 \(n\times m\) 的网格,每个人可以选择还有的格子 \((a,b)\),然后把 \((x',y'),\forall x'>a,y'>b\) remove 掉。无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(n=m=1\)。

证明:

先手可以通过选取必然被后面包含的 \((n,m)\) 来 pass 一步。

如果先手是必败的,选择对手的选择即可。

网易车 Game

买车和买 qq 超级会员。

先手必胜当且仅当其买车。

Bash Game

有一堆石子共 \(n\) 个, 双人博弈, 每次从石子堆中取出 \(1\sim m\) 个石子。无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(n\equiv 0\pmod {m+1}\),可以归纳证明。

SG 函数及与其有关的游戏

公平组合游戏的 SG 函数

考虑 DAG \(E\) 上的移动游戏。定义

\[SG(u)=\operatorname{mex}\{SG(v)\mid (u,v)\in E\} \]

容易发现节点 \(u\) 先手必败当且仅当 \(SG(u)=0\)。

SG定理

一个公平组合游戏可以被一个数,即 SG 函数等价(等价定义见下)。

证明:

首先定义一个游戏的位置(position)是当前局面可以转移到的局面的集合。

两个(可以认为是不同游戏平行进行)位置 \(S\) 和 \(S'\) 的和:\(S+S'=\{S+s'\mid s'\in S\}\cup \{s+S'\mid s\in S\}\)。这告诉我们,加法满足交换律和结合律。

定义两个位置 \(G,G'\) 等价: \(G\approx G'\) 当且仅当 \(\forall H,G+H,G'+H\) 在同一结果类中。这样的等价关系明显是传递的。

Lemma 1

\[\forall A\in \mathcal{P},G\approx G+A \]

设 \(H\) 是任意位置。

证明:若 \(G+H\in\mathcal{P}\),\(A+G+H\) 显然有后手获胜策略。

若 \(G+H\in\mathcal N\),\(A+G+H\) 可以选择一个 \(G+H\) 的 \(\mathcal P\) 位置 \((G+H)'\),之后 \(A+(G+H)'\in \mathcal P\),根据上一行。所以 \(A+G+H\in \mathcal N\)。证毕。

Lemma 2

\(G\approx G'\iff G+G'\in \mathcal P\)。

证明:

先证 \(G\approx G'\Rightarrow G+G'\in \mathcal P\)。

根据定义,\(G'+G(=G+G')\) 和 \(G+G\) 在一个结果类。而显然 \(G+G\in \mathcal P\),那么 \(G'+G\in \mathcal P\)。

再证 \(G\approx G'\Leftarrow G+G'\in \mathcal P\)。

设 \(A=G+G'\),则 \(A\in \mathcal P\)。根据 Lemma 1,

\[G\approx G+A=G+(G+G')\\=(G+G)+G'=G'+(G+G)\approx G' \]

那么 \(G\approx G'\)。

接下来证明原命题。

使用归纳证明之。

考虑位置 \(G=\{G_1,G_2,\dots, G_k\},G'=\{*n_1,*n_2,\dots,*n_k\}\)。

下面证明:\(G\approx *m=\operatorname{mex}(*n_i)\)。

先证明 \(G\approx G'\)。考虑 \(G+G'\):由归纳假设这是 \(\mathcal P\),后手可以通过 \(G,G'\) 中的另一个的与之等价的东西回复先手,而 \(A+A\in\mathcal P\)。所以 \(G+G'\in \mathcal P\)。

再证明 \(G'+*m\in\mathcal P\),显然 \(G'+*m\in\mathcal P\Rightarrow G\approx *m\)。

构造此方案。

考虑先手在 \(*m\) 移动到 \(m'<*m\),而后手可以把 \(G'\) 移动到 \(m'\) 得到两个相等的局面,因为 \(m\) 是 \(\operatorname{mex}\)。

如果先手在 \(G'\) 移动到 \(*n_i\),若 \(*n_i<*m\),后手把 \(*m\) 移到 \(*n_i\);否则后手把这个 \(*n_i\) 搞成 \(*m\)。这样都会得到两个相等的局面。那么 \(G'+*m\in \mathcal P\)。

因此,\(SG\) 函数被证明和游戏等价。

Nim 和

看起来有很多人认为这是 SG 定理,尽管并非如此。

根据 SG 定理:我们已经知道一个公平组合游戏等价于一个 Nim 堆。

以下假设 \(\oplus\) 是异或。

设目前的 \(n\) 堆是 \(x_1,x_2,\dots,x_n\),操作后变成 \(y_1,y_2,\dots,y_n\),改变的是第 \(k\) 堆。

设 \(s=\oplus x_i,t=\oplus y_i\),不难发现 \(t=s\oplus x_k\oplus y_k\)。

Lemma 1

若 \(s=0\),\(\forall t,t\neq 0\)。如果没有移动,命题是 vacuously true。如果移动了,由于 \(y_k<x_k\),命题是显然的。

Lemma 2

若 \(s\neq 0\),\(\exists t,t=0\)。设 \(d\) 是 \(s\) 的最高的非零位,选择 \(k\) 使 \(x_k\) 的 \(d\) 非零。令 \(y_k=s\oplus x_k\),此时 \(y_k<x_k\)。此时不难发现 \(t=0\)。

归纳可以证明 Nim 和。

P2197 代码:

#include<bits/stdc++.h>
using namespace std;
int T,n,a,ans;
int main(){
	cin>>T;
	while(T--){
        cin>>n>>a;ans=a;
		for(int i=1;i<n;i++)cin>>a,ans^=a;
		if(ans)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

标签:approx,游戏,OI,必败,博弈论,证明,Genshing,mathcal,SG
From: https://www.cnblogs.com/british-union/p/17980018/wangyiche

相关文章

  • P1047 [NOIP2005 普及组] 校门外的树
    1.题目介绍[NOIP2005普及组]校门外的树题目描述某校大门外长度为\(l\)的马路上有一排树,每两棵相邻的树之间的间隔都是\(1\)米。我们可以把马路看成一个数轴,马路的一端在数轴\(0\)的位置,另一端在\(l\)的位置;数轴上的每个整数点,即\(0,1,2,\dots,l\),都种有一棵树。由......
  • 【快速阅读二】从OpenCv的代码中扣取泊松融合算子(Poisson Image Editing)并稍作优化
    泊松融合是一种非常不错多图融合算法,在OpenCv的相关版本中也包含了该算子模块,作者尝试着从OpenCv的大仓库中扣取出该算子的全部代码,并分享了一些在扣取代码中的心得和收获。泊松融合我自己写的第一版程序大概是2016年在某个小房间里折腾出来的,当时是用......
  • 2023NOIP A层联测9 风信子+P2048 【NOI2010】 超级钢琴 2023
    P2048【NOI2010】超级钢琴2023NOIPA层联测9风信子一年OI一场空,一道原题见祖宗……Ps:超级钢琴是风信子的前置题。超级钢琴题意在一段序列上,选择长度为\(x\)的区间且\(x\in[L,R]\),求选择\(k\)个区间求和的最大值。思路来自洛谷第一篇Nekroz的题解。将区间和......
  • UVA10295 Hay Points 题解
    题目大意:给你\(n\)个单词,每一个单词的值为\(v_i\),让你求出在一个文章段落里的出现过的单词的值之和。思路:可以用STL库中的map来存储一个单词的值,最后在处理的时候可以直接累加。附上你们最期待的代码:#include<bits/stdc++.h>usingnamespacestd;map<string,int......
  • (区间覆盖问题)P5019 [NOIP2018 提高组] 铺设道路和Educational Codeforces Round 158 (
    区间覆盖问题这里EducationalCodeforcesRound158(RatedforDiv.2)b题和[NOIP2018提高组]铺设道路两道典型题目,本质是相同的。这里由于题目多次出现,特此记录。解题思路:首先我们得对区间做划分,那么划分思路可以是从小到大也可以是从大到小的异常点来做划分(我这是由大到......
  • 在WSL2下的Ubuntu中搭建android开发环境
    关闭虚拟机wsl--shutdown 查看虚拟机是否已经关闭wsl--list--running 在Win11下开启嵌套的VMnotepad%USERPROFILE%\.wslconfig.txt[wsl2]nestedVirtualization=true 安装JDK并配置环境变量sudoaptinstallopenjdk-17-jdk-y vi~/.profileexportJAVA_HOME=......
  • ClickHouse中“大列”造成的JOIN的内存超限问题
    ClickHouse中“大列”造成的JOIN的内存超限问题“大列”是指单行数据量非常大的列,通常是100KiB以上。这样的列会导致JOIN(通常LEFTJOIN和INNERJOIN)出现内存超限的异常。常用的JOIN算法这里讨论的是常用的JOIN算法:partialmergejoin与hashjoin。Directjoin算法不在本文......
  • P5362 [SDOI2019] 连续子序列 题解--zhengjun
    题面传送门提供一种和其他题解完全不同的解法。记\(P_0\)为题中给出的序列,\(P_1\)为\(P_0\)取反的结果。记\(S_{l\simr}\)表示\(S_lS_{l+1}\dotsS_{r}\)。方便起见,\(P\)下标从\(0\)开始,其余的串都是从\(1\)开始。这里用\(P_{0,i}=\operatorname{popcount(i)}......
  • P10073 [GDKOI2024 普及组] 刷野 II 的题解
    P10073[GDKOI2024普及组]刷野II的题解谨以此篇题解记录我考场上唯一通过的一题~解题思路可以考虑定义两个指针x和y,分别为左侧攻击到哪里和右侧。此时,从两侧线性想中间递推,若先打左边的代价小就打左边的,否则就打右边的。按照这个方法向中间推就可以了。Code#include<......
  • P7114 [NOIP2020] 字符串匹配
    Link:https://www.luogu.com.cn/problem/P7114知识点:枚举,结论,Z函数,哈希唉,三年了,三年!!!简述\(T\)组数据,每组数据给定仅由小写字母组成的字符串\(s\),求\(t={(AB)}^iC\)的方案数,其中\(F(A)\leF(C)\),其中\(F(t)\)表示字符串\(t\)中出现奇数次的字符的数量。两种方案不......