首页 > 其他分享 >威佐夫博弈探索纪实。

威佐夫博弈探索纪实。

时间:2023-05-12 21:55:26浏览次数:34  
标签:lfloor 纪实 博弈 必败 rfloor _+ Delta 佐夫 sim

由于是纪实,所以看起来可能很下饭,请勿嘲讽——水平低的人也是有自尊的。


有两堆石子,各有 \(n,m\) 个。双方每轮可以从任意一堆拿任意个,或从两堆分别拿 \(x,y\) 个,满足 \(|x-y|\leq k\),不能不拿。无法操作者败,问先手必胜关于 \(n,m,k\) 的充要条件。

考虑 P/N 态 DP,打个表先。打表的方式为固定 \(k\),打出对于较小 \(n,m\) 的 01 矩阵,便于观察。

初步观察得到以下几个事实:

  • 极大多数位置都是必胜。
  • 必败态的格子除开 \((0,0)\) 外分为两半,关于主对角线对称。上三角的那一半,必败态的行列号分别严格递增,将它们依次连起来,酷似一条直线。
  • 列号的增加速度总是高于行号的增加速度。当 \(k\) 递增时,列号的增加速度在增加,行号的增加速度变化不明显。

一个自然的想法是研究上三角的必败态位置集合,记为 \(\{(a_i,b_i)\}_{i\geq 1}\)。考虑将 \(a,b\) 当作数列研究,将它们以及它们的差分序列同时打出来,容易发现以下结论:

  • \((\Delta b)_i=(\Delta a)_i+k+1\)。这就是说,\(b_i=a_i+(k+1)i\)。
  • \(\Delta b\) 中只有 \(1,2\) 两种元素,且相邻两个 \(2\) 之间 \(1\) 的数量要么是 \(k\),要么是 \(k+1\)。

如果我们能找到 \(\Delta b\) 相邻两个 \(2\) 之间 \(1\) 的数量的规律,那就做完了。而当你兴高采烈地再打出 \(\Delta b\) 的 \(1\) 的连续段长度序列时,发现又是个类似 \(\Delta b\) 的,极差为 \(1\) 且较小值连续段长度极差也为 \(1\) 的序列。继续递归下去,永无止境,毫无规律。找规律题就是这样,哪儿有什么顺风顺水的,你要做的就是别在一棵树上吊死,多睁眼看世界。

事实上,差分序列满足极差为 \(1\),这就暗示我们这其实是由某个实数的整数倍下取整所生成的序列。而找不到规律,便多半是无理数,因为有理数总会形成周期。但鉴于这没有那么显然,选手做题时有概率意识不到,姑且当作后话,此处略去不谈。

另一方面,我们考虑将 \((a_i,b_i)\) 们连接所得的近似直线的斜率。但由于是小数,收敛也比较慢,难以发现规律。

至此,基于 01 矩阵的几何直观已经被挖掘的差不多了。接下来尝试增大形式化程度地推导。

观察 DP 式,由于是 P/N 态 DP,它的形式只是一个集合的 mex。而 mex 容易转化为一个类似筛法的过程:每确定一个必败态 \((u,v)\),都将 \((u+x,v)\)、\((u,v+x)\)、\((u+x,v+y)\) 其中 \(|x-y|\leq k\),这些格子标记一下,再选取最上、最左的没有被标记的位置,作为下一个确定的必败态。

进行一些手玩,立刻又可以发现一些结论:

  • 每行 / 列都最多有一个必败态。因为考虑第一个必败态,它会标记该行 / 列以后的格子。事实上这已经通过几何直观差不多看出来了。
  • 自然会考虑:每行 / 列是否至少有一个必败态,这样结合上条,就可以改为「恰好」。尝试证明,是简单的:一行有无限个格子,而除非横着标记,竖着和类似 band-matrix 的斜着标记只会影响本行有限个格子,不可能覆盖完。

由于已经确定每行恰好有一个必败态,我们立刻可以将二维转化为一维:记 \(f_i\) 为第 \(i\) 行的必败态的列号。由对称性有 \(f_{f_i}=i\)。这样就可以知道:全体正整数在所有必败态的行号集合中都恰好出现一次,列号也是如此。所以 \(f\) 是 \(\N_+\) 的一个置换。不妨考虑其置换环,显然是若干个二元环 \(i\to f_i\to f_{f_i}=i\)。可以发现,所有 \((i,f_i)\) 无序对就是之前提到的 \(\{(a_j,b_j)\}\)。

此时我们对 \(\{(a_i,b_i)\}\) 的性质已经有了更多的了解,可以尝试再回过头来解 \(a_i\) 的通项。受 mex 形式的影响,依直觉考虑增量求解,如果已知 \(a_{1\sim i-1}\)(由 \(b_j=a_j+(k+1)j\),其实也确定了 \(b_{1\sim i-1}\)),考虑 \(a_i\) 显然是剩下未确定的数中最小的,立刻有 \(a_i=\operatorname{mex}(\{0\}\cup\{a_{1\sim i-1}\}\cup\{b_{1\sim i-1}\})\)。

至此,我们已经得到了 \(a,b\) 的递推式。对某个固定的 \(k\),容易在 \(\mathrm O(n)\) 时间内求解 \(a,b\) 的前 \(n\) 项,在题目中足以获得不错的分数。至于通项,那属实有点 magic 的成分了,姑且当作知识学习吧,正所谓思而不学则殆。另一方面来看,直到当前这一步,以上观察和推导其实都是相对平凡的,只要你真的认真去推了。


接下来是 magic 的部分。参考《具体数学》第 3.2 章末尾。

定义正实数 \(x\) 的谱 \(S(x)=\{\lfloor kx\rfloor\}_{k\geq 1}\),可以将其看作序列,也可以看作可重集,这是等价的,因其非严格递增。

显然,没有任何两个谱是相同的。因为对于 \(x<y\),显然存在足够大的 \(k\) 使得 \(\lfloor kx\rfloor<\lfloor ky\rfloor\)。

我们定义两个谱 \(S(x),S(y)\) 是 \(\N_+\) 的一个划分,当且仅当 \(S(x)\sqcup S(y)=\N_+\),其中 \(\sqcup\) 是无交并。

我们要检查一个可重集是否等于 \(\N_+\),只要看其 counter array 是否全为 \(1\)。而对于整除,不等号处理显然是容易的,于是我们取 counter array 的前缀和,那么只需对每个 \(n\in\N_+\) 检查不超过 \(n\) 的数量是否为 \(n\)。

考虑一个谱 \(S(x)\) 不超过 \(n\) 的数量 \(N(x,n)\):

\[\begin{aligned} N(x,n)&=\sum_{k\geq 1}[\lfloor kx\rfloor\leq n]\\ &=\sum_{k\geq 1}[kx<n+1]\\ &=|[1,(n+1)/x)\cap\N|\\ &=\lceil (n+1)/x\rceil-1 \end{aligned} \]

Beatty 定理指出:对于两个无理数 \(x,y\),若 \(1/x+1/y=1\),则 \(S(x),S(y)\) 形成 \(\N_+\) 的划分。

证明:只要证 \(\lceil (n+1)/x\rceil-1+\lceil (n+1)/y\rceil-1=n\)。由于是无理数,那么取整号内的数一定不是整数,可以做一步化简:\(\lfloor(n+1)/x\rfloor+\lfloor(n+1)/y\rfloor=n\)。为了应用 \(1/x+1/y=1\) 的条件,考虑拆开整除:\((n+1)/x+(n+1)/y-\{(n+1)/x\}-\{(n+1)/y\}=n\)。前两项显然为 \(n+1\),后两项小数部分之和显然在 \((0,2)\) 内,而 LHS 是整数,所以小数部分之和一定为 \(1\),等式得证。

对于威佐夫博弈,由于 \(a,b\) 是 \(\N_+\) 的划分,于是尝试构造无理数 \(x,y\) 满足 \(1/x+1/y=1\),使得 \(S(x)=a,S(y)=b\)。列出方程 \(\lfloor ix\rfloor+(k+1)i=\lfloor iy\rfloor\)。两边小数部分相同,于是可以去掉取整,得到 \(y=x+k+1\),于是 \(1/x+1/(x+k+1)=1\),解得 \(x=(1-k+\sqrt{k^2+2k+5})/2\)。到这儿已经做完了。


纵观全文,发现有一个由观察得到的关键性质 \(b_i=a_i+(k+1)i\) 没有予以证明,现在来证一下。至于为什么放到最后,是因为一个 OIer 不需要会证明,观察、推导、猜想和打表足矣。

考虑对 \(i\) 归纳。此时 \(a_{1\sim i-1},b_{1\sim i-1}\) 已经确定,并用递推式算出了 \(a_i\)(\(a\) 的递推式不依赖此结论)。

由于 \(a_i\leq b_i\),所以对 \(j<a_i\),\((a_i,j)\) 都是必胜态。

对 \(j\in[a_i,a_i+(k+1)i)\),显然 \((a_{i-1},b_{i-1})\) 能通过斜着标记覆盖到 \((a_i,j)\),也是必胜态。

这样,不会有必败态横着覆盖到 \((a_i,a_i+(k+1)i)\)。竖着显然也不会,因为易证在 \(\{a_{1\sim i-1}\},\{b_{1\sim i-1}\}\) 内出现过的数都小于 \(a_i+(k+1)i\)。接下来只要证斜着也不会覆盖到即可。

格子 \((x_1,y_1)\) 能斜着覆盖 \((x_2,y_2)\),仅当 \(|(x_1-y_1)-(x_2-y_2)|\leq k\)。而对 \(j\in[1,i-1]\),\(a_j-b_j\) 或 \(b_j-a_j\) 最大只能到 \((k+1)(i-1)\),于是不可能覆盖 \((a_i,a_i+(k+1)i)\)。至此,已经得证。

标签:lfloor,纪实,博弈,必败,rfloor,_+,Delta,佐夫,sim
From: https://www.cnblogs.com/ycx-akioi/p/wythoff-game.html

相关文章

  • 博弈论
    基础概念相关参考资料:易老师整理(放个大佬的链接)NimGame题目:有n堆石子,数量分别为\(a_1,a_2,...,a_n\),两个玩家均足够聪明,轮流拿石子,每次仅可以从任意一堆中拿走任意数量的石子。结论:当\(a_1⊕a_2⊕...⊕a_n≠0\)时,先手必胜;否则先手必败。而且,令\(a_1⊕a_2⊕...⊕a_n=x\),则定......
  • 基于主从博弈的共享储能与综合能源微网优化运行研究
    基于主从博弈的共享储能与综合能源微网优化运行研究综合能源微网与共享储能的结合具有一定的创新性,在共享储能的背景下考虑微网运营商与用户聚合商之间的博弈关系,微网的收益和用户的收益之间达到均衡。采用主从博弈的方法,微网运营商作为上层领导者制定价格策略,用户聚合商作为下层......
  • matlab程序设计,承接研究范围:综合能源系统优化调度,主从博弈,综合需求响应,碳交易机制,阶梯
    matlab程序设计,承接研究范围:综合能源系统优化调度,主从博弈,综合需求响应,碳交易机制,阶梯型碳交易机制,多时间尺度优化。ID:41100678701976813......
  • MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究
    MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究关键词:主从博弈共享储能综合能源微网优化调度参考文档:《基于主从博弈理论的共享储能与综合能源微网优化运行研究》完全复现仿真平台:MATLAByalmip+cplex主要内容:代码主要做的是基于主从博弈理论的共享储能与综......
  • MATLAB代码:基于主从博弈的电热综合能源系统动态定价与能量管理
    MATLAB代码:基于主从博弈的电热综合能源系统动态定价与能量管理关键词:主从博弈电热综合能源动态定价能量管理参考文档:店主自编文档,完全复现仿真平台:MATLAB平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品!主要内容:代码主要做的是电热综合能源系统的动态定......
  • MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究。
    MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究。提出共享储能背景下微网运营商与用户聚合商间的主从博弈模型,并证明Stackelberg均衡解的存在性与唯一性。最后,在MATLAB平台上进行算例仿真,通过Yalmip工具与CPLEX求解器进行建模与求解,利用启发式算法与求解......
  • J - Simple Game (博弈论外壳下的模运算考察题目)
    原题链接:https://vjudge.net/contest/555710#problem/J手工翻译:Alice和Bob在玩一个游戏有这样一个数列a1,a2,a3,a4……an长度为n,他们轮流移走一个整数当数列中没有可移走的整数时游戏结束,Alice移走的数的和是S1,Bob移走的数的和是S2如果abs(s1-s2)为奇数,Alice赢,否则Bob赢接下来给......
  • 博弈论入门
    博弈论有向图游戏Nim游戏Nim游戏的定义是,给定\(n\)堆石子,两个玩家去交替的拿石头,每次只能拿某一堆的石头,如果此时有一个玩家无法进行这个游戏了,则游戏结束。为了解决这个问题,比较直接的会先想到一个类似于\(DP\)的思路,考虑当前每个状态,去将其划分为两个状态,这里我们定义为\(P:......
  • Codeforces Round #459 (Div. 2) D. MADMAX DAG&&博弈
    Asweallknow,Maxisthebestvideogameplayeramongherfriends.Herfriendsweresojealousofhers,thattheycreatedanactualgamejusttoprovethatshe’snotthebestatgames.Thegameisplayedonadirectedacyclicgraph(aDAG)withnvertic......
  • HDU 1527 取石子游戏(博弈论)
    取石子游戏TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):3717    AcceptedSubmission(s):1868ProblemDescription有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有......