威佐夫博弈
# 威佐夫博弈
有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,不能不取,最后取完者得胜。
名词解析:
- 奇异局势:选手面对奇异局势时必输
威佐夫博弈的前几个奇异局势为
# 性质
设为第个奇异局势
为前个奇异局势中没有出现过的最小正整数,
任意一个自然数都被包含在一个且仅在一个奇异局势中
由性质1可知每个自然数必定会出现
假设某个自然数出现了不只一次,显然不能作为,而只能作为
又因为不同奇异局势差依次递增,且依次递增,因而不同
任何操作都会将奇异局势变为非奇异局势
- 若取走任意一堆的任意数量石子,根据性质2,局势转变为非奇异局势
- 若两对同时取走相同数量石子,由于一个差值只对应一种奇异局势,因而转变为非奇异局势
至于性质一的证明嘛....没有!
# 结论
设两堆石子为
由上述性质,可知对于第个奇异局势,,且构成的一个分划
根据Betty定理,可以设
令,得到的一个无理数解
因此,第个奇异局势为
换句话说,先手必败(奇异局势)当且仅当
# 例题 洛谷P2252
import math
a, b = map(int, input().split())
x, y = [min(a, b), max(a, b)]
# 此处不能用'is',必须用'=='
if (y - x) * (1 + math.sqrt(5)) // 2 == x:
print(0) # 先手必败
else:
print(1) # 先手必胜
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# betty定理
对于两个无理数,若
那么对于,则构成正整数集的一个分划(即)
此处没有证明!!!
# 奇异局势的来源
以下为感性分析
为了便于讨论,下文中的奇异局势均满足
显然是一个奇异局势,那么我们从出发,把所有可以转移到的状态划掉
那么 会被划掉
接着,我们从未被划掉的点中选取一个最小的点(且为了满足,应在直线上方寻找)
可知这个点为,该点为第一个奇异局势,同时将可以转移到的状态划掉
那么都已被划掉(?),其中,在本轮被划掉
下一次取,只能取
进而猜测
一番推导
# 例题 HDU 6869 威佐夫博弈变形
两堆石头,每次可以从一堆中取任意多个,或从两堆中分别取个,且满足。其中为题目所给的常数。最后取不到石头的者输。问先手是否有必胜策略。
仿照上述过程
最终得到通项
# 参考
https://blog.csdn.net/qq_30435963/article/details/108100061
上次更新: 2021/02/24, 03:37:30