博弈论入门之nim游戏
更好的阅读体验点这里
nim游戏
nim游戏
有两个顶尖聪明的人在玩游戏,游戏规则是这样的:
有\(n\)堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的人失败。问谁会胜利
nim游戏是巴什博奕的升级版(不懂巴什博奕的可以看这里)
它不再是简单的一个状态,因此分析起来也棘手许多
如果说巴什博奕仅仅博弈论的一个引子的话,
nim游戏就差不多算是真正的入门了
博弈分析
面对新的博弈问题,我们按照套路,从简单的情况入手
当只有一堆石子的时候,先手可以全部拿走。先手必胜
当有两堆石子且石子个数相同的时候,先手不论拿多少,后手都可以从另一堆中拿同样多的石子,先手必败,否则先手必胜
当有三堆的时候呢?
当有\(n\)堆的时候呢?
这样玩下去确实是很繁琐,不过前辈们总结出了一条非常厉害的规律!
定理解析
定理
对于nim游戏,前辈们发现了一条重要的规律!
当\(n\)堆石子的数量异或和等于\(0\)时,先手必胜,否则先手必败
证明
设\(\oplus\)表示异或运算
nim游戏的必败态我们是知道的,就是当前\(n\)堆石子的数量都为零
设\(a[i]\)表示第\(i\)堆石子的数量,那么当前局面就是
$0 \oplus 0 \oplus 0 \oplus \dots \oplus 0 = 0 $
- 对于先手来说,如果当前局面是
\(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n = k\)
那么一定存在某个\(a_i\),它的二进制表示在最高位\(k\)上一定是\(1\)
我们将\(a_i \oplus k\),这样就变成了
\(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n \oplus k = 0\)
此时先手必胜
- 对于先手来说,如果当前局面是
\(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n = 0\)
那么我们不可能将某一个\(a_i\)异或一个数字后使得
\(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n = 0\)
此时先手必败
代码
#include<cstdio>
using namespace std;
int a[10001];
int main()
{
int Test;
scanf("%d",&Test);
while(Test--)
{
int ans=0,N;
scanf("%d",&N);
for(int i=1;i<=N;i++) scanf("%d",&a[i]);
for(int i=1;i<=N;i++) ans=ans^a[i];
ans==0?printf("No\n"):printf("Yes\n");
}
return 0;
}
题目
临时还没有做太多题目,以后做多了慢慢补吧
估计没几个人能一眼秒吧233
博弈论入门之nim游戏的更多相关文章
- BZOJ_1022_[SHOI2008]_小约翰的游戏John_(博弈论_反Nim游戏)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1022 反Nim游戏裸题.详见论文<组合游戏略述——浅谈SG游戏的若干拓展及变形>. ...
- 博弈论入门——Nim游戏引入
说实话,我真的对这个游戏看得是一脸懵逼,因为(我太弱了)我没有明白一些变量的意思,所以一直很懵,现在才明白,这让我明白博弈论(还可以骗钱)博大精深; 以下是我自己思考的过程,也许不严谨,但是最终明白了 ...
- [您有新的未分配科技点]博弈论入门:被博弈论支配的恐惧(Nim游戏,SG函数)
今天初步学习了一下博弈论……感觉真的是好精妙啊……希望这篇博客可以帮助到和我一样刚学习博弈论的同学们. 博弈论,又被称为对策论,被用于考虑游戏中个体的预测行为和实际行为,并研究他们的应用策略.(其实这 ...
- 洛谷$P$4301 $[CQOI2013]$新$Nim$游戏 线性基+博弈论
正解:线性基 解题报告: 传送门! 这题其实就是个博弈论+线性基,,,而且博弈论还是最最基础的那个结论,然后线性基也是最最基础的那个板子$QwQ$ 首先做这题的话需要一点点儿博弈论的小技能,,,这题的 ...
- 博弈论之Nim游戏
Nim游戏是组合游戏(Combinatorial Games)的一种,属于“Impartial Combinatorial Games”(以下简称ICG). 通常的Nim游戏的定义是这样的:有若干堆石 ...
- 【博弈论】浅谈泛Nim游戏
Nim游戏在ACM中碰到了,就拎出来写写. 一般Nim游戏:有n堆石子,每堆石子有$a_i$个,每次可以取每堆石子中$[0,a_i-1]$,问先手是否有必胜策略. 泛Nim游戏:每堆石子有$a_i$个 ...
- Nim游戏与SG函数 ——博弈论小结
写这篇博客之前,花了许久时间来搞这个SG函数,倒是各路大神的论文看的多,却到底没几个看懂的.还好网上一些大牛博客还是性价比相当高的,多少理解了些,也自己通过做一些题加深了下了解. 既然是博弈,经典的N ...
- BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作 ...
- (博弈论)51NOD 1069 Nim游戏
有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N及每堆石子的数量,问最后 ...
随机推荐
- 网页开发--03(wampserver安装服务无法启动的问题)
一.安装wampserver 一路next,指定安装路径外,其它默认安装. 二.我遇到的问题 当任务图标绿色为正常启动状态,但是我的从打开一直是黄色,问题在于Apache和MySql 1)Apache ...
- html5 postMessage 实现类似 sendMessage 的同步效果,支持跨域
实现一个客户端发送 “save 一个答案,在获取答案, 跨域的另一个页面中,回调返回”3“的场景. 客户端:请在 http://127.0.0.1/pk/index.html 打开 <html& ...
- 在Windows、Mac和 Linux系统中安装Python与 PyCharm
“工欲善其事,必先利其器”,本文介绍 Python环境的安装和 Python的集成开发环境(IDE) PyCharn的安装. 一.Python安装( Windows.Mac和 Linux) 当前主 ...
- [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix
We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...
- [Swift]LeetCode954. 二倍数对数组 | Array of Doubled Pairs
Given an array of integers A with even length, return true if and only if it is possible to reorder ...
- Elasticsearch基础知识分享
1. Elasticsearch背景介绍 Elasticsearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elast ...
- CentOS6.5中部署java web环境
原来在linux中部署java web环境,没有做好总结,这次在部署的过程中,将部署的过程做了记录,希望对大家有帮助.主要内容包括CentOS安装以后的网络设置,系统自带jdk的卸载,新版本jdk的安 ...
- 甘果移动老甘:移动互联网变迁中的App和小程序
2018 年 10 月13 日,由又拍云和知晓云联合主办的 Open Talk 丨2018 小程序开发者沙龙系列活动广州站拉开帷幕,甘果移动的 CEO 路文杰(老甘)在沙龙上做了<移动互联网变迁 ...
- 【WebAPI No.4】Swagger实现API文档功能
介绍: Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为 ...
- ASP.NET Core WebApi AspNetCoreRateLimit 限流中间件学习
AspNetCoreRateLimit介绍: AspNetCoreRateLimit是ASP.NET核心速率限制框架,能够对WebApi,Mvc中控制限流,AspNetCoreRateLimit包包含 ...