Leetcode 1908. Nim 游戏 II

article/2025/6/15 15:00:04

1.题目基本信息

1.1.题目描述

Alice 和 Bob 交替进行一个游戏,由 Alice 先手。

在游戏中,共有 n 堆石头。在每个玩家的回合中,玩家需要 选择 任一非空石头堆,从中移除任意 非零 数量的石头。如果不能移除任意的石头,就输掉游戏,同时另一人获胜。

给定一个整数数组 piles ,piles[i] 为 第 i 堆石头的数量,如果 Alice 能获胜返回 true ,反之返回 false 。

Alice 和 Bob 都会采取 最优策略 。

1.2.题目地址

https://leetcode.cn/problems/game-of-nim/description/

2.解题方法

2.1.解题思路

SG函数 / 记忆化搜索 / 公式

2.2.解题步骤

公式证明:

命题:如果nim游戏先手选择时的石子堆数为[a1,a2,...,an],如果x=a1^a2^...^an=0,则先手必败,如果x!=0,则必胜

证明1(x!=0,则先手必胜):

  • 假设当前的状态x=a1^a2^...^an,设x的二进制最高位为k,那么一定存在一个ai,其二进制的第k位为1,由异或的运算规律可知,ai^x<ai(ai^x的最高位被异或没了,但是ai二进制最高位还在),现在从ai中挑选出若干个,使ai变成ai^x,此时的x=a1^a2^...^ai^x^...^an=0(异或的交换律),所以一定存在一个选择方式,使后手处于必败态(即x==0)

证明2:(x==0,则后手必败)(反证)

  • 假设当前的状态x=a1^a2^...^an=0,假设存在一个选择方法,使ai变成bi(ai>bi),且x2=a1^a2^...^bi^...^an=0;则x^x2=ai^bi=0,即ai==bi,这和ai>bi假设冲突,所以推翻假设,即不存在一个选择方法,使选择后的x!=0,得证

3.解题代码

python代码

# 功能:求集合st第一个不存在的自然数
def mex(st:set) -> int:i = 0while i in st:i += 1return i# 功能:记忆化搜索计算sg值
memo = {}
def sg(x:int) -> int:if x not in memo:# 1.子游戏中递归出口if x == 0:return 0# 2.子游戏中x状态的下一个状态的sg值集合st = set()for i in range(x):st.add(sg(i))memo[x] = mex(st)return memo[x]class Solution:def nimGame(self, piles: List[int]) -> bool:# 思路:SG函数result = 0for pile in piles:result ^= sg(pile)return result != 0def nimGame1(self, piles: List[int]) -> bool:# 思路:公式ans = 0for num in piles:ans ^= numreturn ans != 0

4.执行结果


http://www.hkcw.cn/article/rvtiAFJwQG.shtml

相关文章

飞致云开源社区月度动态报告(2025年5月)

自2023年6月起&#xff0c;中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…

湖北秭归:屈原故里过端午 龙舟竞渡展非遗

5月30日,2025年屈原故里传统龙舟大赛在湖北省秭归县茅坪镇徐家冲港湾激情开赛。秭归作为屈原的故乡,也是中国龙舟运动的重要发源地之一,端午节期间赛龙舟、祭屈原的传统习俗一直延续至今。今年的比赛继续展示了“点睛、下水、游江、竞渡、抢红”等传统的龙舟仪式,追溯历史岁…

Target店铺应该如何入驻?

Target作为美国知名的零售巨头&#xff0c;其电商平台为众多商家提供了一个拓展业务、提升品牌知名度的绝佳机会。然而&#xff0c;入驻Target平台并非易事&#xff0c;需要商家满足一系列的条件并支付相应的费用。 以下是&#xff0c;明月跨境&#xff0c;总结出的详细的入驻指…

基于PyQt5 开发的Todo应用

Demo地址&#xff1a;https://gitcode.com/rmbnetlife/todo-app-pyqt.git PyQt Todo 应用 一个使用 PyQt5 开发的现代化任务管理应用&#xff0c;帮助您高效管理日常任务和待办事项。 &#x1f4cb; 应用简介 这是一个功能完整的桌面任务管理应用&#xff0c;具有直观的图形…

springboot集成websocket给前端推送消息

一般通常情况下&#xff0c;我们都是前端主动朝后端发送请求&#xff0c;那么有没有可能&#xff0c;后端主动给前端推送消息呢&#xff1f;这时候就可以借助websocket来实现。下面给出一个简单的实现样例。 首先创建一个websocketDemo工程&#xff0c;该工程的整体结构如下&a…

002医护人员排班系统技术解析:构建高效医疗人力管理平台

医护人员排班系统技术解析&#xff1a;构建高效医疗人力管理平台 在医疗行业高速发展的今天&#xff0c;科学合理的医护人员排班对保障医疗服务质量和效率至关重要。医护人员排班系统作为医疗信息化管理的重要工具&#xff0c;通过整合医院信息管理、医护信息管理、医护类型管…

CTFHub-RCE 命令注入-过滤目录分隔符

观察源代码 代码里面可以发现过滤了目录分隔符\和/ 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 发现存在一个flag_is_here的文件夹&#xff0c;我们需要打开这个文件夹找到目标文件我们尝试分步&#xff0c;先利…

使用curlconverter网站快速生成requests请求包

在python写requests请求的时候&#xff0c;抓包后需要复制粘贴包的内容&#xff0c;然后手动修改和写代码。 最近发现一个好的网站 https://curlconverter.com/python/ 可以复制curl(bash)数据后&#xff0c;直接生成数据包&#xff0c;非常便捷。 举例说明&#xff1a; 选…

产品规格书写作结构、规范(编写指南)

一、产品规格书定义 产品规格书是一种综合性文档&#xff0c;它将产品需求、交互设计、业务流程和界面原型有机结合在一起。与传统文字为主的规格书不同&#xff0c;产品规格书通过高保真原型、动态交互和详细注释来完整表达产品功能和用户体验要求。 产品规格书是产品设计阶…

Webug4.0靶场通关笔记16- 第16关MySQL配置文件下载

目录 第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 &#xff08;1&#xff09;Windows系统 &#xff08;2&#xff09;Linux系统 4、防御方法 本文通过《webug4.0靶场第16关MySQL配置文件下载》来进行渗透实战。文件下载是指 Web 应用程序在处理文件下载…

Java开发经验——阿里巴巴编码规范实践解析10

摘要 这篇文章主要介绍了阿里巴巴Java开发的编码规范实践解析&#xff0c;重点聚焦于系统设计规范。文中强调了存储方案和底层数据结构设计的重要性&#xff0c;指出其需要经过严格评审并形成文档。同时&#xff0c;详细阐述了设计与评审流程&#xff0c;包括设计方案初稿、建…

AutoML详解:自动化机器学习的未来

AutoML详解&#xff1a;自动化机器学习的未来 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AutoML详解&#xff1a;自动化机器学习的未来摘要引言技术架构对比1. 核心组件&#xff1a;从算法到工作流2. 算法实现…

(8)-Fiddler抓包-Fiddler如何设置捕获会话

1.简介 在前面我们介绍了Fiddler界面内容以及作用。那么我们接下来讲解和分享如何设置Fiddler后&#xff0c;我们就可以捕获会话&#xff0c;进行抓包了。 2.捕获会话的设备 常见的捕获会话的设备分为PC&#xff08;电脑&#xff09;端和手机&#xff08;Android和IOS苹果&am…

虚拟DOM和DOM是什么?有什么区别?虚拟DOM的优点是什么?

虚拟DOM与真实DOM的概念 虚拟DOM&#xff08;Virtual DOM&#xff09;是一种对真实DOM的抽象表示&#xff0c;其结构通常为一个JavaScript对象&#xff0c;保存了DOM节点的标签、属性、子节点等信息。真实DOM则是浏览器中的实际文档对象模型&#xff0c;由HTML代码解析生成&am…

电赛TIMSPM0G3507 CCS环境安装在D盘的方法

前言 安装TI的环境内存占用还是比较大的&#xff0c;但是大家默认安装到C盘&#xff0c;本篇就教大家从0到一安装到D盘 先把3个要下载的下载了 1.安装SDK 登录LP-MSPM0G3507 评估板 | TI.com.cn这个网站 选择Windows的下载 2.下载图形配置软件 登录SYSCONFIG IDE、配置、编译器…

电力高空作业安全检测(3)RT-DETR模型

背景与挑战 YOLO 系列模型长期以来在实时目标检测领域占据主导地位&#xff0c;因其在速度与精度之间取得了良好的平衡。然而&#xff0c;这些模型在处理多尺度特征时&#xff0c;往往依赖于非极大值抑制&#xff08;NMS&#xff09;后处理步骤&#xff0c;这不仅增加了计算…

项目架构初始化,底部导航页面切换

引言 在移动端应用开发中&#xff0c;底部导航栏是一种常见的用户界面元素&#xff0c;用于在不同的页面之间进行快速切换。本文将介绍如何初始化一个 Vue.js 项目&#xff0c;并实现底部导航栏页面切换的功能。 &#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &…

51c大模型~合集133

我自己的原文哦~ https://blog.51cto.com/whaosoft/13948969 #用Veo 3Suno做了个AI Rapper 吊打音乐节上的流量明星 太疯狂了&#xff01;AI生成的嘻哈歌手唱Rap以假乱真&#xff0c;网友直呼「看不出破绽」。 来来来&#xff0c;眼尖的朋友请告诉我&#xff0c;下面这个…

俄称控制定居点 乌称打击俄纵深目标 双方战事持续升级

俄罗斯国防部5月31日发布战报称,俄军控制了苏梅州沃多拉哈和顿涅茨克地区诺沃波利居民点。在过去24小时内,俄军在苏梅、哈尔科夫、顿涅茨克、扎波罗热、赫尔松等方向打退乌军多次进攻并发动多次攻势。乌克兰武装部队总司令瑟尔斯基同一天表示,乌军在5月使用远程精确武器打击…

机器学习知识图谱——K-means++聚类算法

目录 一、图解K-means++ 聚类算法知识图谱 二、K-means 是什么? 三、K-means++ 是什么? 四、K-means++ 算法流程 第一步:选择初始质心(核心改进) 第二步:执行 K-means 正式流程 五、算法图示 六、优点 vs 缺点 七、常用场景 八、Python 代码示例 (使用 sklear…