威佐夫博弈(数论到博弈)

这篇博客探讨了两种博弈策略:一是两人轮流取石子的游戏,分析了如何通过最优策略确保获胜;二是A和B报数到30的游戏,揭示了先手和后手的获胜条件。通过数学模型和奇异局势概念,解释了如何将非奇异局势转化为奇异局势,从而确定获胜策略。此外,还介绍了类似的游戏,强调了在博弈中策略的重要性而非运气。
摘要由CSDN通过智能技术生成

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

我们用(a[k],b[k])(a[k] ≤ b[k] ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。(注:k表示奇异局势的序号, 第一个奇异局势k=0)
可以看出,a[0]=b[0]=0,a[k]是未在前面出现过的最小自然数,而 b[k]= a[k] + k。

奇异局势:
1。任何自然数都包含在一个且仅有一个奇异局势中。
由于a[k]是未在前面出现过的最小自然数,所以有a[k] > a[k-1] ,而 b[k]= a[k] + k > a[k-1] + k > a[k-1] + k - 1 = b[k-1] > a[k-1] 。所以性质1成立。
2。任意操作都可将奇异局势变为非奇异局势。
事实上,若只改变奇异局势(a[k],b[k])的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。如果使(a[k],b[k])的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。
3。采用适当的方法,可以将非奇异局势变为奇异局势。
假设面对的局势是(a,b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);如果a = a[k] ,b > b[k] 那么,取走b - b[k]个物体,即变为奇异局势;如果 a = a[k] , b < b[k] 则同时从两堆中拿走a-a[b-a](注:这里b-a是a的下标, 不是a*(b-a)) 个物体变为奇异局势( a[b-a], b-a+a[b-a]);如果a > a[k] ,b= a[k] + k 则从第一堆中拿走多余的数量a - a[k] 即可;如果a < a[k] ,b= b[k],分两种情况,第一种,a=a[n] (n< k)从第二堆里面拿走 b - b[n] 即可;第二种,a=b[n] (n < k)从第二堆里面拿走 b - a[n] 即可。

#include<bits/stdc++.h> 
using namespace std;
long long a,b;
int main()
{
	scanf("%lld%lld",&a,&b);
	if(a>b) swap(a,b);
	long long c=(b-a)*(sqrt(5)+1.0)/2.0;
	if(c==a) printf("0");
	else printf("1");
	return 0;
}

其中 c=(b-a)*(sqrt(5)+1.0)/2.0;是精华。

PS:A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。
其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯定是B报的,可以看出,作为后手的B在个游戏中是不会输的。那么如果我们要报n个数,每次最少报一个,最多报m个,我们可以找到这么一个整数k和r,使n=k*(m+1)+r,代入上面的例子我们就可以知道,如果r=0,那么先手必败;否则,先手必胜。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值