ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

博弈论总结

2019-07-20 17:52:43  阅读:359  来源: 互联网

标签:总结 ... xor 博弈论 偶数 异或 SG mex


博弈论总结

本总结最多只有提高+/省选-的水平。

博弈论大概就是指两人取石子或者下棋,求先手或者后手必胜的游戏,往往有多组数据,主人公经常是AliceBob

这类游戏有一个学名叫做公平组合游戏(ICG)。定义就是两人轮流操作一个局面,直至不能操作而判负的游戏。

1. 手推博弈论

简单的博弈论往往可以通过找规律就得出答案。

P3150 pb的游戏

结论1:最终局面为一个数1,是奇数,为必败情况。

结论2:奇数只能选择拆分成奇数+偶数,但偶数既可以选择拆为奇数也可以选择拆为偶数。

如果所以如果先手拿到偶数,就把他分割为两个奇数,后手只能将奇数分为一奇一偶,先手又可以取出偶数分割,最后的1一定会留给后手,所以先手必胜,反则先手必败。

#include <bits/stdc++.h>
using namespace std;

int T,N;

int main()
{
    cin >> T;
    while (T--)
    {
        cin >> N;
        cout << (N&1 ? "zs wins" : "pb wins") << endl;
    }
}

P4136 谁能赢呢?

如果双方不会走到到死胡同里,那显然每个格子都会被经过,一共有\(N^2\)个格子,与\(N\)的奇偶性相同。

显然偶数格时先手会刚好走掉最后一个格子,所以N为偶数即先手必胜,否则后手必胜。

而双方如果遇到自己必胜的局面,是一定会阻止死胡同形成的。如图,不可能形成死胡同。

稍微复杂些的博弈游戏就需要用到一些贪心或者数学知识了。

P1199 三国游戏

这道题稍微接近贪心。

对于每一个武将,他所能达到的最大值是一定取不到的。所以只能将每个武将能达到的次大值取到。

找到最大的"每行次大值",选取该值对应的一个武将,电脑会选择该武将默契值最高的武将,接下来就能将次大值取到。

接下来就要防止电脑取到更大的值,每次如果电脑选了每行最大值的一路,把另一路拿下就可以了,每行最大值一定是一人一半。计算机不可能取得胜利。

P1290 欧几里德的游戏

本题特点在于操作后的数是固定的,但是可以一次进行多次辗转相减。

1:25 7 
2:18 7
3:11 7
4:7 4
5:4 3
6:1 3
7:1 0

如果每次只能进行一次操作,那么根据一共能进行的操作次数就能判断胜负。

但是先手能掌控步骤1~4的顺序,相当于可以把4: 7 4的局面选择留给自己或者后手,两种局面一定有一个必胜局面。

所以,只要出现能够多次辗转相减的情况,即a >= 2b,当前操作者就是必胜的。

#include <bits/stdc++.h>
#define long long long
using namespace std;

int T,k,f;
long N,M;

void work(const long x,const long y)
{
    k++;
    if (x%y==0) return;
    if (x/y > 1) 
    {
        f = 1;
        return;
    }
    work(y,x%y);
}

int main()
{
    scanf("%d",&T); while (T--)
    {
        scanf("%lld%lld",&N,&M); k = f = 0;
        if (N < M) N ^= M ^= N ^= M;
        work(N,M);
        puts(k&1 ? "Stan wins" : "Ollie wins");
    }
}

其他练习题:

P4860 Roy&October之取石子II

P4018 Roy&October之取石子

P1288 取数游戏II

2. SG函数

SG函数是专门为博弈论设计的一种函数。

设x是一种局面,SG(x)就可以表示当面局面的SG值。

这里讲一讲自然数集合的mex运算。mex(S) = 不属于S的最小自然数。

比如\(mex({0,2,3}) = 1, mex({1,4} = 0)\)

mex的意义就好比lowbit对于树状数组的意义一样。

一个局面的SG值就是它能达到的所有局面的SG值集合的mex运算。

即\(SG(x) = mex({SG(y_1,y_2,...y_i)})\),终止输局的SG值为0.

显然若子局面全为必胜(SG>0),则当前必败(正整数集合的mex值为0)。

若子局面有一个必败(SG = 0),则当前必胜(含有0的集合mex值大于0)。

所以SG值为0,则当前必败,大于0则当前必胜。

需要注意的是,稍有难度的博弈题,都会面临极多的状态。不可能直接用SG函数求解。

SG函数本身只能用于小数据是暴力,辅助找规律。

3. NIM博弈

现有N堆石子,第i堆有\(a_i\)个,每次可从任意一堆里取任意多个石子,取走最后一个石子者获胜。

如果只有一堆石子,先手全部取完就赢了。这相当于一个\(SG(x) = x,x ∈ N\)。

这里的多堆石子相当于有多个游戏在同时进行。我们用类似第一题的方法来证明一个结论;

  1. 若所有石子全被取光,则\(0\ xor\ 0 ... \ xor\ 0 = 0\)是必败局面。
  2. 若\(a_1\ xor\ a_2 ...\ xor\ a_n = x,x≠0\),那么所有\(a_i\)中至少有一个与\(x\)最高位1相同,这样就能使得\(a_i\ xor\ x \le a_i\)。我们就可以把\(a_i\)修改为\(a_i\ xor\ x\)。此时就能满足\(a_1\ xor\ a_2 ...\ xor\ a_n = 0\)。
  3. 若\(a_1\ xor\ a_2 ...\ xor\ a_n = 0\),因为\(a_1\ xor\ ...a_{i-1}\ xor\ a_{i+1}\ xor ...\ a_n=a_i\),如果修改了\(a_i\),等式左边不变,式子无法满足。则此时\(a_1\ xor\ a_2 ...\ xor\ a_n\)一定不为0.

异或不为0可以转化为异或为0,异或为0只能转化为异或不为0,最终必败时异或为0。

所以异或为0就是必败局面,不为0就是必胜局面。

NIM博弈反映了多个独立的博弈同时进行时的胜负情况。推广到所有博弈:

若有n个同时进行的独立博弈游戏,初始局面分别为\(a_1...a_n\),则总SG值\(SG_{sum} = SG(a_1)\ xor\ SG(a_2)\ ...\ xor\ SG(a_n)\)

阶梯NIM

现有阶梯0-N,其中1-N上各有\(a_i\)个石子每次可以任选一堆石子,选任意多个,向下移动一阶,不能移动者失败。

结论:若\(a_1\ xor\ a_3\ ...\ xor\ a_{2k+1} = 0\)(即奇数位置上的石子异或为0),则先手败,否则先手胜。

最低阶0是偶数,把所有奇数堆看成一个NIM游戏。那么从奇数移到偶数就相当于丢弃棋子。

如果异或和不为0,先手就按照NIM的策略,移动奇数放入下一个偶数。

如果后手也玩NIM,那他就输了,最后会导致只有偶数位有棋子且轮到后手。此时后手每将棋子往下移,我们就把他移动过的棋子再向下移,最后一次移动一定在先手手里。

如果后手将偶数位的棋子,下移到奇数位,我们就继续把后手移动过的棋子移到下一个偶数位,对NIM局面没有影响,最后情况将根上一个相同。

P2148 [SDOI2009]E&D

每组石子是独立的,我们可以分别算出SG值,再异或合并。

有\(SG(x,y) = mex(\{\forall SG(a,b),a+b=x|a+b=y\})\),这个式子不能拿去递推。

但是可以用来辅助打表,快速找到规律\(SG(x,y)= \_\_builtin\_ctz(-(x|y)+1)\),即x|y最低位0所在位。

当然有闲心可以参考第二篇题解的严格证明:

\(设S_z为满足x+y+1=z的SG(x,y)构成的集合,则S_z等于z二进制下1的位置集合,f取最低0所在位\)

\(证:若有x+y+1=z,且有f(x|y)=k,那么x,y的第k位都是0,0~k-1位中两个数至少有1个是1\)

\(因为x|y\le x+y,x|y的0~k-1位均为1,所以x+y+1(=z)一定能向k位进位\)

\(所以只要z的第k位是1,就可以找到符合条件的x,y\)

\(SG(x,y)=mex(S_x∪S_y)=mex(S_{x ∣ y}),0为未出现,1为出现,mex与f定义相同\)

\(所以有SG(x,y)=f(x|y)\)

证明其实很难,我是跟着题解想的。

所以学会借助SG的定义打表找规律就变得很重要。

P2575 高手过招

每行是独立的,算完异或合并。

每行的空格数是不变的,那么把每个空格看成一个分割符,就是一个阶梯nim。

P1247 取火柴游戏

这题更裸,扫一遍算出异或值,再扫一遍找到二进制最高位与sum相同的,减去\(d_i-d_i\ xor\ sum\) 即可。

从以上几道题可以看出,SG函数的意义更多在于辅助思维,方便打表,而不是直接用来出解。

其他练习题:

P2197 【模板】nim游戏

CF1194D 1-2-K Game

标签:总结,...,xor,博弈论,偶数,异或,SG,mex
来源: https://www.cnblogs.com/ofnoname/p/11218552.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有