【Nim 游戏】 学习笔记
前言
没脑子选手随便一道博弈论都不会 ……
正文
Nim 游戏引入
这里给出最简单的 \(Nim\) 游戏的题目描述:
\(Nim\) 游戏
有两个顶尖聪明的人在玩游戏,游戏规则是这样的:
有\(n\)堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的人失败。
问最后谁会胜利。
结果是:当 \(n\) 堆石子的数量异或和等于 \(0\) 时,先手必胜,否则先手必败。
来考虑口胡一个证明:
考虑异或和是 \(0\) 的意义。
异或和是 \(0\) 代表着对于所有石头数的每一位二进制上的数字都有偶数个1。
那么无论先手怎么操作拿掉哪堆石头里的多少个数量。
后手都可以拿去对应的石头数量使得剩下的石头数的每一位二进制上的数字都有偶数个。
显然最后后手会拿下最后石子,此时先手败。
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,m,x,f[10100],a[10010],sg[100010];
bool vis[100010];
int main(){
scanf("%d",&T);
while (T--){
scanf("%d",&n);
int ans=0;
for (int i=1; i<=n; i++){
scanf("%d",&a[i]);
ans^=a[i];
}
if (ans) printf("Yes\n");
else printf("No\n");
}
}
阶梯 Nim 游戏
给出这种 \(Nim\) 游戏的题目描述:
给你一个 \(n\) 层的楼梯,每个台阶上都有一堆石子 \(a_i\)
每次把一个台阶上的至少一个石子搬运到它的上一层台阶,不能操作的人输。
玩游戏的两个人都是绝顶聪明。
这里给出结论(反正我也不会证明):
一个状态是必胜态,当且仅当奇数层节点的 \(a_i\) 的按位异或和不为 \(0\)。
代码的话,具体看题目吧。
高手过招-巧妙的阶梯 Nim 【题解】
POI 2009 阶梯 Nim 基础题
【Nim 游戏】 学习笔记的更多相关文章
- Nim游戏学习笔记
- 零基础入门Python游戏学习笔记(1)
书是车洪于2020年出的,到手已经过去一年多了.现在学来,好多东西不一样了. 作者的GitHub,大家知道的原因,并不好打开. 代码就不搬了,只是为了学习方便,书籍勘误搬一下. 一.开发环境: 1.p ...
- [学习笔记]nim游戏
普通nim游戏: n堆石子,每个人每次对着一堆拿若干个.不能拿者判输. 只有两种情况,先手必胜,先手必败. 先手必胜当且仅当:a1^a2^...^an!=0 证明: 设=x(x不为0),选择最高位和x ...
- cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现
一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create ...
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建
一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...
随机推荐
- 使用vscode编辑markdown文件(可粘贴截图)
使用markdown粘贴截图时,操作步骤比较多: 1)截取图片: 2)将图片存在特定位置: 3)记住图片路径,在markdown文件中编写代码: 4)预览效果: 而word之类的文档编辑器,只需要截图 ...
- CentOS8 AnolisOS8 yum安装 No match for argument: htop Error: Unable to find a match: htop
这里写自定义目录标题 CentOS8 AnolisOS8 yum安装失败 安装失败原因 阿里云官方镜像主页 正确的操作步骤 学习交流 My Blog 技术交流 CentOS8 AnolisOS8 yu ...
- css的过渡transition和动画animation
过渡 过渡(transition)是CSS3中具有颠覆性的特性之一,我们可以在不使用Flash动画或JavaScript的情况下,当元素从一种样式变换为另一种样式时元素添加效果.过渡动画:是从一个状态 ...
- Spring (IOC)配置
就是这个东西,里面的不同标签,所代表的不同含义 beans 里面有很多的bean ,每一个bean都是容器里面的一个对象 1.别名alias (另外的一个名字) XML <alias na ...
- SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统
一.单点登录SSO介绍 目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...
- JavaScript 任务池
JavaScript 任务池 本文写于 2022 年 5 月 13 日 线程池 在多线程语言中,我们通常不会随意的在需要启动线程的时候去启动,而是会选择创建一个线程池. 所谓线程池,本意其实就是(不止 ...
- 小米 pro 笔记本双硬盘设置引导盘
功能键 F2 进入 BIOS F12 进入 Boot 选项 步骤 小米 Pro 默认是开启了 UEFI,如果 Boot 选项没有显示出期望的系统盘,那么就是这个系统盘没有 UEFI 分区,按照这个文档 ...
- 从MySQL全备文件中恢复单个库或者单个表
从MySQL全备文件中恢复单个库或者单个表 提取建库语句 sed -n '/^-- Current Database: db_cms/,/^-- Current Database: `/p' back ...
- Git移除远程已经上传的文件
我们常常会将本地的一些秘钥文件不小心推送到远端,此时仅仅修改本地的.gitignore文件,然后再提交推送是不能将远端的此文件删除的. 此时可以用下面的命令 git rm --cached filen ...
- PHP odbc查询SQL SERVER数据库带有中文时无返回数据
近日遇到一个小麻烦当数据库中有中文字符数据 结果odbc_fetch_array后 我用json_encode怎么也得不到数据页面一片空白 我脑子也一片空白后来才知道sqlserver 没有 UTF- ...