博弈练习
博弈练习
理论后面再补吧
[省选联考 2023] 过河卒
我们将其局面抽象为一张图,然后不难发现没有环的情况我们直接\(dfs\)就可以了
如果有环的话,其对应的应该就是\(Tie\)的情况,具体的就是如果我们在访问\(x\)的祖先时\(x\)就可以达成死循环的局面,但这个不好维护
反过来考虑,我们直接对可以直接判断的局面作为起始节点跑个类似于拓扑的结构
如果是\(u\)必败,\(v\)则为必胜,\(u\)必胜,我们记录\(v\)还可以转移的边,如果没了\(v\)就是必败
最后没访问到的就是\(Tie\)
有点卡常
[POI1999]多边形之战
降智题
这个多边形的每条边作为无向图上的每条边,然后你会发现操作就是删除叶子节点
如果黑色的就是叶子先手必胜
否则俩个人一定要删\(n-1\)(\(n\)是树的节点数)次,直接\(\&1\)即可
BZOJ3895
如果没有大小为\(1\)的石子堆,理论上我们可以操作的次数是\(Sum+n-1\)
如果\(Sum+n-1\)是奇数,\(A\)一定有办法使其一直为奇数,因为每次\(Sum+n-1\)都只\(-1\)
且\(A\)一定会避免出现\(1\)的石子堆
对于\(Sum+n-1\)为偶数,其实也差不多,\(A\)因为先手所以无法改变,因此\(B\)必胜
如果出现了\(1\)的石子堆,取\(1\)这个石子堆会使\(Sum+n-1\)一次\(-2\)
如果有一个\(1\),\(A\)可以选择\(-1\)或\(-2\),因此\(A\)必胜
如果有两个\(1\),如果\(A\)本就必胜,\(A\)可以将两个\(1\)和在一起
如果必败,\(A\)无论怎样操作,\(B\)同样可以操作回来
因此可以分\(1\)的奇偶
如果全是\(1\),或者一个\(2\)和全部\(1\),只有当\(1\)的个数是\(3\)的倍数是\(B\)才可能赢
谁能赢呢?
\(n\)是偶数是必胜
如果没封口,以上易证
考虑封口的情况,如果是\(A\)决定往哪边封口
则现在已经有奇数个格子
如果一口是偶数,\(n\)是偶数,另一口是奇数则\(A\)可以往奇数的那边跑
如果一口是奇数,一样的
如果\(n\)是奇数,那两口都是偶或奇,如果是奇\(A\)就赢了?
好像\(B\)可以避免这种情况,在封口前延迟封口即可
本质是在二分图上博弈,结论是当最大匹配包含\(S\)时先手必胜
[ZJOI2009]染色游戏
首先对于这些翻棋子的游戏,都有个结论,局面的\(SG\)为所有正面棋子单独存在的\(SG\)的异或和
对于单个棋子\((i,j)\)的异或和,分类讨论一下
如果\(i=1\)或\(j=1\),考虑另一维所处位置\(x\),结论是\(SG(x)=lowbit(x)\)
考虑归纳证明,如果\([1,2^k-1]\)满足
对于\(x\in[2^k,2^{k+1}-1]\),往后依次延伸,你取到\(x-2^{k}\)的时候,恰好和\(x-2^{k}\)往后取是一样的,然后你还会发现这一段\(SG\)的异或和为\(0\),因此\(SG(x)=SG(x-2^k)\)
我们对于每个\(x\)一次减去它的最高位,最后剩下的就是\(lowbit(x)\)
如果\(i,j\)均不为\(1\),\(SG(i,j)=2^{i+j-2}\)
同样考虑归纳证明
如果\((i-1,j)\),\((i,j-1)\)均满足条件
对于\((i,j)\),首先\((i-1,j)\)出发的点能取到的\(SG\in[0,2^{k}-1]\),再异或一个\(2^k\)
也就取到了\([2^{k},2^{k+1}]\),如果再取\((i,j-1)\),那有可以取\([0,2^{k}-1]\)
因此\((i,j)\)能取到\([0,2^{k+1}]\)
最后用\(bitset\)算即可
「BZOJ1457」棋盘游戏
这个就有点类似与\(SG\),不过胜利条件改为第一次到达\((0,0)\)
如果有可以一步到达的那\(A\) 必胜
否则两个人一定会把棋子堆到\((2,1)\)或\((1,2)\),这样就转化为不能挪动的输,直接\(SG\)求即可
Moving Pebbles
首先如果\(n\)为偶数且数量相等的堆一一对应,我们直接模仿就行了,先手必输
这里我们排个序然后把能配对的删去
剩下的如果\(n\)时奇数,我们把先手最大的取完,然后移动去填\(2i-1\)和\(2i\)的差,可以证明填完一定有剩余,因为最大的等于差分的前缀和加上第一个
如果\(n\)时偶数,一样的,把最大的移到和最小的相等,然后再用多余的填差分,这样也一定时够的
[SDOI2011]黑白棋
很明显每对黑白棋子之间可以看成一个\(Nim\)堆
然后这就是可\(K-NIM\)游戏,结论是每个二进制为为\(K+1\)的倍数时后手必胜
然后直接对位\(Dp\)即可
[HAOI2015]数组游戏
注意到\(\lfloor\dfrac{n}{x}\rfloor\)相同的\(x\)的\(SG\)是相同的
因为\(\lfloor\dfrac{n}{xk}\rfloor=\lfloor\dfrac{\lfloor\dfrac{n}{x}\rfloor}{k}\rfloor\)
考虑直接对\(n\)整除分块,然后块于块之间,我们考虑从后往前考虑直接前缀\(SG\)然后取\(MEX\)
对于块\(\lfloor\dfrac{n}{x}\rfloor\),\(\lfloor\dfrac{\lfloor\dfrac{n}{x}\rfloor}{k}\rfloor\)同样可以整除分块,然后预处理出所有块的\(SG\)即可
有点卡常
CF98E
先手为\(0\),那他一定会直接猜,如果后手为\(0\),那先手就赢了
如果现在有状态\((n,m)\),他现在有两种选择
一是直接猜,赢的概率是\(\dfrac{1}{m+1}\)
二是指定一张,我们暂时不考虑指定自己已有的牌,那就有\(\dfrac{1}{m+1}\)输,有\(\dfrac{m}{m+1}(1-(m-1,n))\)的概率赢
小丑了,可能可以指定自己的牌从而达到欺骗的作用
对于这种情况,我们不妨考虑如果\(B\)不傻,那\(A\)的欺骗等同于告诉\(B\)自己的手牌
还有一点很麻烦,如果\(A\)或\(B\)在不清楚桌上的牌时直接猜怎么办
似乎这样做一定不优,额,证明就算了吧,感觉有点牵强
因为两者一定不会不清楚情况直接猜,所以对于\(B\),一定是在是否信任\(A\)的情况下进行猜测
我们可以据此列出一个\(A,B\)决策不同时\(A\)的胜率\(f(n,m)\)的表格
不出手牌 | 出手牌 | |
---|---|---|
中了\(B\) | \(1-f(m-1,n)\) | |
没中\(B\)不信 | 1 | \(1-f(m,n-1)\)(因为在\(B\)的视角中\(A\)的牌减少了) |
没中\(B\)信 | 0 | 1 |
然后对于\(A\),\(B\),我们分别设\(p,q\)为出手牌,是否信任的决策频率,这个\(p,q\)是可以随时调整的?不过对于混合策略,我们姑且认为\(A,B\)有\(p,q\)的概率做出对应决策
由此\(A\)的胜率即为\(g(n,m,p,q)=(1-p)[\dfrac{m}{m+1}(1-f(m-1,n))+\dfrac{1}{m+1}(1-q)]+p[(1-p)(1-f(m,n-1))+q]\)
观察这个式子,对于\(A,B\)可以调整\(p,q\)使得自己的收益最大
根据纳什均衡,我们的\(A\)要采取一个策略使得无论\(B\)的\(q\)怎么变其答案都不会更优
当然,对于\(B\)也是这样
然后考虑\(p\)固定,那\(B\)一定会选择\(Ming(n,m,p,q)\),那么对于\(A\)同样也是会选择所有\(Min\)中的\(Max\)
所以答案\(f(n,m)=Min_{q=0}(Max_{p=0}g(n,m,p,q))\)
然后考虑固定\(q\),\(g(n,m,p,q)\)是个关于\(p\)的一次函数,所以它的\(Max\)是在端点\(p=0,1\)时取得
我们画出\(p=0,p=1\)的函数,其实也就是关于\(q\)的一次函数
\(p=0,\dfrac{m}{m+1}(1-f(m-1,n))+\dfrac{1}{m+1}(1-q)\)
\(p=1\),\((1-q)(1-f(m,n-1))+q\)
观察到\(p=0\)时斜率小于\(0\),\(p=1\)时斜率就是\(f(m,n-1)>0\),所以最后的答案就是函数的交点,我们只需对于每个\((n,m)\)解出\(q\)即可,这个用纳什均衡解释就是对于\(A\),我采取的策略\(p\)一定使\(B\)怎么选策略\(q\)都不会有多种选择,也就时说\(A\)的策略要保证\(B\)的策略一定,这样的选择仅仅是对于\(A,B\)策略微调时的局部最值,但对于这道题来说似乎只有一个峰,毕竟\(B\)的\(q\)最值处在\(1,0\)
[AGC016F] Games on DAG
考虑用\(2^m\)减去不合法的,也即\(SG(1)=SG(2)\)
考虑用\(SG\)的不同取值来划分\(DAG\)
然后我们考虑每一层地添加点,状压目前有的点
\(dp_S\)为\(S\)的导出子图的方案数
考虑枚举\(S\)的补集的子集\(sub\)
首先\(S\)的每个点都必须连到\(sub\),然后\(sub\)连\(S\)任意
然后我们在枚举\(sub\)的时候注意\(1,2\)均在其中即可
CF794E Choosing Carrot
先考虑\(k=0\)的情况
如果\(n\)为偶数,对于\(B\),只要模仿\(A\)的操作就可以使得答案限制在\(A_{mid},A_{mid+1}\)
同样\(A\)也可以模仿\(B\)使得答案在\(A_{mid},A_{mid+1}\)中,可以认为\(A,B\)之间达成妥协使得答案一定在俩者之间,\(A\)不能更大而\(B\)也不能更小
而\(A\)可以对此做出选择,只需我们对最开始的数进行选择即可,即\(max(A_{mid},A_{mid+1})\)
如果\(n\)为奇数,\(B\)同样可模仿使得答案限定在\(A_{mid},A_{mid+1},A_{mid-1}\),在最后只剩下三个数的时候,\(A\)先进行选择,\(B\)再选择,即\(max(min(A_{mid},A_{mid+1}),min(A_{mid},A_{mid-1}))\)
再考虑\(A\)可以提前操作,也就是我们可以变中点
其实直接统计每个中点的贡献即可
[ARC116F] Deque Game
上面那道题的进阶
稍作思考我们会发现对于\(n\)为奇数的先手劣于后手
就是你比一下大小就可以了,以\(A\)为例,先手是\(max(min(A_{mid},A_{mid+1}),min(A_{mid},A_{mid-1}))=min(A_{mid},max(A_{mid+1},A_{mid-1}))\)
后手是\(min(max(A_{mid},A_{mid+1}),max(A_{mid},A_{mid-1}))=max(A_{mid},min(A_{mid+1},A_{mid-1}))\)
很明显后手优于先手
当然偶数先手优于后手
所以我们的最优策略对于\(A,B\)来说都是拿偶数,然后是做全是奇数的游戏
考虑偶数的个数,如果是\(A\)拿的最后一个,那接下来就还是\(A\)先手,因为在最后一个偶数序列\(B\)被强制选择和\(A\)在这里做游戏
如果是\(B\)拿的最后一个同理
至于这个偶数序列怎么取,对于\(B\)先手的情况,由\(A\)按对答案贡献从大到小取
\(A\)先手就是\(B\)取
[AGC048D] Pocky Game
首先这是个不公平的博弈,肯定不能用\(SG\)😓
然后看到这种只能取左边或右边不难想到区间\(Dp\)
如果只是单纯存下\(l,r\)的胜负情况,\(1e9\)肯定也存不下
然后对于单个堆,石子数量越多越好
所以我们取的时候只会取\(1\)个或一整堆
我们可以考虑记录\([l,r]\)这段中\(a_l\)或\(a_r\)所需的最小值
设\(dp_{l,r,0}\)为\([l,r]\)这一段\(A\)取时\(a_l\)所需最小值且\(a_{l+1}\)到\(a_{r}\)和原序列相同,\(dp_{l,r,1}\)同理
考虑如果\(dp_{l+1,r,1}<a_r\),那我取完\(a_l\)就赢了,所以\(dp_{l+1,r,1}=1\)
否则,我肯定不会取完而是一个一个取,为了防止\(B\)一次性取完,所以\(dp_{l,r,0}>dp_{l,r-1,0}\),且在\(A,B\)都是一个一个取的时候,\(B\)先取到临界,即\(dp_{l,r,0}=dp_{l,r-1,0}+1+a_r-dp_{l+1,r,1}\)
最后直接判\(a_1\)和\(dp_{1,n,0}\)的关系即可
小结一下,不难发现前半部分的题大部分都是结论题(・∀・
对于这种题,一般都是找到\(B\)的必败状态然后看是否任意局面都可以一步到达
或者时直接猜\(SG\)
后半部分额,都是神仙题