什么是威佐夫博弈呢?

我们用(x,y)表示当前两堆石子分别剩下x,y时的局势,(x,y)和(y,x)是同一种局势
显然,当先手处于(0,0)的时候必败。我们将会使先手必败的局势叫做奇异局势。
我们先用手推一下可以转移到先手(0,0)的局势。
手推方法:易知(1,2)是奇异局势。画出平面直角坐标系,将所有的(1+k,2+k),(1+k,2),(1,2+k),(x,x),(2+k,1),(2,1+k),(2+k,1+k)(\(k\in N_+\))划掉,找到剩余的在y=x上面(x,y)最小的点(3,5),然后继续这么找
通过手玩数据可得到前几个奇异局势
1:(1,2)
2:(3,5)
3:(4,7)
4:(6,10)
5:(8,13)
6:(9,15)
7:(11,18)

发现好像十分之有规律.jpg
1.第i个奇异局势的x是之前所有奇异局势中,没有出现的最小非负整数。
2.我们发现第i个奇异局势两个数的差是i.
上面的规律在数据变大之后依旧成立吗?
1.证明:
如果不是没有出现的最小非负整数,则按照选的方法还可以选到更小的点作为第k个奇异局势
2.证明:
如果(x,x+k)不是奇异局势,则一定存在某种方法使对手面对奇异局势。
1.取某一堆的石子:
取少的那堆:变为(t,x+k),由于规律1正确,所以对手可以把局势变为第t个奇异局势,与假设矛盾。
取多的那堆:变为(x,t+k)。若t+k<x,则对手可以将局势转为t+k对应的奇异局势。若t+k>x,因为x<t+k<x+k,所以t+k可转化成某个奇异局势的y,对手就拿成了相应的奇异局势(可以手玩辅助理解)
2.两堆都取:由于之前的奇异局势中,x与y的差都<k,所以无论如何你都不能把当前状态转移到一个奇异局势上去。而对手可以通过一些操作把非奇异局势转化为奇异局势。对手的玄学操作可以和1的情况差不多
我们知道这些性质之后,有什么用吗?
每个奇异局势的x都是之前没有出现过的正整数中的最小值,不会与之前的数重合,而y=x+k,每个奇异局势的k都不同,导致y也不予之前的数重合。将所有奇异局势的x组成集合\(A\),所有的y组成集合\(B\)(这里默认x<y),发现\(A\bigcup B\)=\(N_+\),\(A\bigcap B\)=\(\emptyset\)
似乎这一点可以继续乱搞的样子。
在这里介绍一个定理:\(Beatty\)定理:
\(a、b\)是正无理数且 \(\frac{1}{a}\) +\(\frac{1}{b}\)=1。记P={ [na] | n为任意的正整数},Q={ [nb] | n 为任意的正整数},([x]'指的是取x的整数部分)则P与Q是N+的一个划分,即P∩Q为空集且P∪Q为正整数集合N+。

证明走这里
设第n个奇异局势的x表示为\(an\),那么第n个奇异局势的y表示为\(an+n=(a+1)n\)。因为第一个奇异局势是(1,2),所以\(a\geq 1\)。按照\(Beatty\)定理,\(\frac{1}{a}+\frac{1}{a+1}=1\),即\(a^2-a-1=0\)。取大于1的根:\(\frac{1+\sqrt5}{2}\)
所以第n个奇异局势的第一个数就是\(an=\frac{1+\sqrt5}{2}\)。若某个局势是奇异局势,则n为两数之差。当两数之差乘\(\frac{1+\sqrt5}{2}\)是第一个数(即较小的数)时,它就是个奇异局势,先手必败,否则先手必胜。
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
inline int read()
{
    char ch=getchar();
    int x=0;bool f=0;
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=(x<<3)+(x<<1)+(ch^48);
        ch=getchar();
    }
    return f?-x:x;
}
int n,m;
double ys=((sqrt(5.0)+1.0)/2.0);
int main()
{
    n=read();m=read();
    if(n<m) swap(n,m);
    int cha=n-m;
    if(m==(int)(ys*(double)cha)) printf("0");
    else printf("1");
}
01-31 17:10