首页 > 其他分享 >Nim游戏2(台阶型)

Nim游戏2(台阶型)

时间:2024-11-21 19:28:41浏览次数:1  
标签:台阶 游戏 Nim 石子 先手 棋子 移动

有1~n级台阶,每个台阶有a[i]个石子,每次操作可以将k级台阶的一些石子移动到k-1级台阶上。移动到第0级不可再动,无法再操作者输,给出石子分布情况,问先手是否必胜

和取石子nim游戏本质相同,考虑移动石子的过程,通过“观察”可得,结论是奇数台阶数量异或和为0则先手必输,否则必赢。
结合上一篇的两个定理,来证明一下
还是设\(S\)为a[1] ^ a[3]...的结果(奇数台阶异或和),假设\(S\)非0,此时可以看作就这些石子,每次往下一阶移动石子就是取走石子,所以一定是可以通过一次操作使得\(S\)变为0的
来考虑对手面对\(S\)为0的局面是否必输:
对手可能的操作1:选择某个奇数台阶移动任意的石子,根据定理,这一定会使\(S\)变大,走向可能的必胜局面
对手可能的操作2:选择某个偶数台阶移动任意的石子,会给某个奇数台阶数量增加,打破二进制位的位数平衡导致\(S\)变大
所以先手的人会再把\(S\)变成0,如此循环,最终轮到先手的人接手仅剩第一个台阶的一些石子,此时\(S\)肯定是非0的,先手的人直接一步结束游戏即可
同理,如果开始\(S\)等于0,反过来先手的人必输。
证毕
来点有意思的延伸题目
POJ 1704
Georgia 和 Bob 决定玩一个自己发明的游戏。他们在纸上画一排网格,从左到右用 1、2、3 等对网格进行编号,并将 N 个棋子放在不同的网格上,如下图所示,例如:
Georgia 和 Bob 依次移动棋子。每次玩家都会选择一个棋子,并将其向左移动,而不会越过任何其他棋子或越过左边缘。玩家可以自由选择棋子移动的步数,但限制是棋子必须至少移动一步,并且一个网格最多可以包含一个棋子。无法移动的玩家输掉游戏。
自从“Lady first”以来,Georgia 总是先玩。假设 Georgia 和 Bob 都在游戏中尽了最大的努力,即,如果他们中的一个知道赢得游戏的方法,他或她将能够执行它。
考虑到 n 个棋子的初始位置,您能预测谁最终会赢得比赛吗?

image

解题思路

乍一看好像和刚刚的没啥关系,接下来给个逆天的转化
考虑棋子\(k\)向左移动,那么与左侧第一个棋子\(k-1\)之间的空格不久对应的减少了吗,而没有空格能让我们减少的时候,就代表游戏over,欸,这是不是有点像上文的nim游戏台阶型了,两个棋子中间的空格就代表这一级台阶的石子数目,然后,就欧克啦

标签:台阶,游戏,Nim,石子,先手,棋子,移动
From: https://www.cnblogs.com/hapihapi/p/18561382

相关文章

  • manim边做边学--圆环面
    Torus类在制作数学、物理或工程领域的动画时具有广泛的应用场景。比如,通过动态演示环面的拓扑变换(如内外翻转、扭曲等),帮助我们直观地理解拓扑不变量和同胚等概念;此外,也可以模拟磁场线在环面导体中的分布和运动,展示电磁感应现象等等。本篇介绍Torus的主要参数和基本使用方法。1......
  • 《Python游戏编程入门》注-第7章
    《Python游戏编程入门》第7章“用精灵实现动画:EscapetheDragon游戏”中通过pygame.sprite模块(精灵)实现了动画效果。1通过精灵实现动画“7.2使用Pygame精灵”中实现了飞龙飞翔的效果,如图1所示。图1飞龙飞翔的效果注意1相关代码及资源,请参考《Python游戏编程入门注-第......
  • 游戏/软件提示msvcp140_1.dll错误无法继续运行怎么办?手把手修复msvcp140_1.dll错误
    遇到msvcp140_1.dll错误通常意味着你的系统缺少了运行某些应用程序所需的MicrosoftVisualC++Redistributable库文件。这个DLL文件是MicrosoftVisualC++的一部分,许多应用程序和游戏依赖于这些库来正确运行。以下是一些步骤,可以帮助你解决这个问题:重新安装Micros......
  • 使用 Nimrod实现简单图像识别
    在本篇文章中,我们将使用Nimrod编程语言编写一个基础图像识别程序。该程序将检测图片中的主要色调分布,并标识出是否包含特定颜色,如红色。我们使用这门有趣且鲜为人知的语言,来感受它的简洁和强大。安装与准备工作Nimrod(现称Nim)可以通过以下步骤安装:访问Nim官方网站下载最新......
  • 【小游戏】保姆级超有意思的贪吃蛇前端项目,小时候的回忆——你确定不来看看??
    文章目录整体架构流程技术细节整体架构流程HTML5+CSS3+JS技术细节一.打开vscode,新建文件名称如下,当然你的css也可以写在html里代码如下<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content=&qu......
  • (算法)跳跃游戏————<贪心算法>
    1.题⽬链接:55.跳跃游戏2.题⽬描述3.解法:和跳跃游戏II⼀样,仅需修改⼀下返回值即可。C++算法代码:classSolution{public:boolcanJump(vector<int>&nums){intret=0,n=nums.size();intl=0,r=0;while(l<=r){......
  • 前端游戏网站【GAME】大学生web期末大作业 html+css+js
    目录1.项目介绍2项目展示3.代码部分4.联系我 1.项目介绍这是大一时候写的一个前端游戏网站,包括了火影忍者,原神,蛋仔派对(没有写完),英雄联盟(没有写完),现在才想起来有怎么一个项目可以分享出来可以练练手。2项目展示前面使用html+css+js:Div、导航栏、图片轮翻效果、视频......
  • 博弈论:公平组合游戏(Nim 游戏 & SG 定理)学习笔记
    博弈论:公平组合游戏(Nim游戏&SG定理)学习笔记公平组合游戏定义:两人轮流以最优方式操作,两人的操作方式相同。每次操作游戏状态必须改变,不能操作者输,另一人赢。每个游戏状态不能重复到达。我们把每个状态看作一个点,每个状态的点向它后继状态的点连有向边,可以生成一张DAG(......
  • P7115 [NOIP2020] 移球游戏
    link这道题我觉得是我做到过极好的构造题了,思路和优化的方法都比较有特点,对数据点范围的分析已经对数据的给分也比较恰到好处。之前做了这道题,特此写一篇题解。首先要批判一下给的小样例,对解题很容易起到反作用。所以构造题不能只看样例,要自己去手搓一下,这样才方便去做。本题我......
  • 【AN】Adobe Animate专业动画和互动内容制作软件下载安装(附win/mac安装包)
    目录AdobeAnimate简介一、功能介绍1.1动画制作1.2互动设计1.3多平台输出二、下载2.1获取安装包2.2 安装AdobeAnimate三、快捷键使用3.1基础操作快捷键3.2编辑快捷键3.3动画快捷键AdobeAnimate简介AdobeAnimate(AN)是Adobe公司推出的专业动画和互动......