博弈论 Nim游戏

之前从来没有系统学过博弈论的相关定理,遇到的基本都是从题面中找到相关的规律。在刷牛客tracker的时候遇到了这个问题,总结一下。

经典模型

地上有n堆石子,甲乙两人交替取石子。每人每次可以从任意一堆里面取,但不能不取。最后没有石子可取的人就输了。假如甲先手,且已知每堆石子的数量是a i a_iai,问谁会取得获胜?

  • 结论

如果( S = a 1 ⊕ a 2 ⊕ ⋯ ⊕ a n ≠ 0 ) (S = a_1 \oplus a_2 \oplus \dots \oplus a_n≠0)(S=a1a2an=0),则先手必胜

如果( S = a 1 ⊕ a 2 ⊕ ⋯ ⊕ a n = 0 ) (S = a_1 \oplus a_2 \oplus \dots \oplus a_n=0)(S=a1a2an=0),则后手必胜

洛谷有一道板子题,可以直接用结论解决:P2197 【模板】Nim 游戏 - 洛谷


结论的变种

大多数情况都不会直接使用结论,下面说两种简单的变种。

小A取石子

小A取石子_牛客题霸_牛客网

这个题的变化之处在于先手在游戏开始之前可以选择先在某一堆取k kk个石子。

通过结论我们可以知道:必败态之后一定有必胜态

  • 如果此时的状态本来就是先手胜,可以不进行这个操作
  • 如果此时的状态是后手胜,就需要考虑进行操作
    • 如果k=0,无法进行操作,那么会失败
    • 如果k>max_element,即k比最大的那一堆都大,也无法操作,失败
    • 其他通过操作都能找到必胜态
voidsolve(){intk;cin>>n>>k;vector<int>a(n);for(auto&i:a)cin>>i;intx_or=0;for(autoi:a)x_or^=i;if(x_or){cout<<"YES"<<endl;return;}intsum=*max_element(all(a));if(!k||k>sum)cout<<"NO";elsecout<<"YES";}

取火柴游戏

P1247 取火柴游戏 - 洛谷

本题不同的是,不仅要判断是否先手必胜,还要给出如果先手必胜的话第一次要取哪一堆的多少个石子

从结论中我们可以得到必胜态之后必为必败态,即达到X = a 1 ⊕ a 2 ⊕ ⋯ ⊕ a n = 0 X = a_1 \oplus a_2 \oplus \dots \oplus a_n=0X=a1a2an=0

此时的状态是:
a 1 ⊕ a 2 ⊕ ⋯ ⊕ a n = X a_1 \oplus a_2 \oplus \dots \oplus a_n=Xa1a2an=X
我们此时想让它变成必败态,根据异或的交换律:
a 1 ⊕ ( a 2 ⊕ X ) ⊕ ⋯ ⊕ a n = 0 a_1 \oplus (a_2\oplus X) \oplus \dots \oplus a_n=0a1(a2X)an=0
由于是取走一堆石子之后变成的这样,所以需要a 2 > a 2 ⊕ X a_2>a_2 \oplus Xa2>a2X

题中要求输出的< b , a > <b,a><b,a>的字典序尽可能小,其中b bb是堆数,a aa是取走的石子数。也就是说要选择尽可能靠左的石子堆进行操作。那么我们从前往后遍历,找到符合条件的直接操作就行了。

// Problem: P1247 取火柴游戏// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P1247// Memory Limit: 125 MB// Time Limit: 1000 msvoidsolve(){cin>>n;vector<int>a(n);intx_or=0;for(auto&i:a)cin>>i,x_or^=i;if(x_or){for(inti=0;i<n;i++){if((a[i]^x_or)<a[i]){cout<<a[i]-(a[i]^x_or)<<' '<<i+1<<endl;a[i]=a[i]^x_or;break;}}for(inti:a)cout<<i<<' ';}elsecout<<"lose";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1165070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js用LruCache提升缓存效率

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js缓存效率革命&#xff1a;LruCache的深度实践与前瞻应用目录Node.js缓存效率革命&#xff1a;LruCache的深度实践与前瞻应…

数据共享平台扩展性设计:水平扩展实践

数据共享平台扩展性设计&#xff1a;水平扩展实践——从“单桌餐厅”到“连锁餐饮”的架构进化 一、引入与连接&#xff1a;为什么需要水平扩展&#xff1f; 1. 开场&#xff1a;一个“崩溃”的数据共享场景 想象一下&#xff1a;你负责的政务数据共享平台&#xff0c;平时稳定…

【值得收藏】ToPG:基于命题图谱导航的RAG方法,实现粒度与结构的完美平衡

ToPG提出命题级RAG解决方案&#xff0c;构建"实体-命题-段落"异构图&#xff0c;实现三种搜索模式&#xff1a;Naive(单跳事实)、Local(多跳推理)和Global(抽象/综述)。该方法通过查询感知游走&#xff0c;解决了传统RAG粒度与结构不可兼得的痛点。实验证明&#xff…

大模型领域六大岗位详解:从入门到精通,附学习资源,程序员必备收藏!

本文解析大模型领域六大类岗位&#xff08;技术研发、算法、数据、产品、深度学习和垂直领域&#xff09;的职责与要求&#xff0c;提供从入门到精通的系统学习路径&#xff0c;帮助读者掌握大模型技术&#xff0c;找到适合的职业方向&#xff0c;并附有免费学习资源。AI行业人…

基于Web手工艺品销售系统的开发与实现毕业论文+PPT(附源代码+演示视频)

文章目录基于Web手工艺品销售系统的开发与实现一、项目简介&#xff08;源代码在文末&#xff09;1.运行视频2.&#x1f680; 项目技术栈3.✅ 环境要求说明4.包含的文件列表&#xff08;含论文&#xff09;数据库结构与测试用例系统功能结构前端运行截图后端运行截图项目部署源…

大数据领域分布式计算的混合计算模式

大数据领域分布式计算的混合计算模式:从“单一工具”到“全能工具箱”的进化 关键词:分布式计算、混合计算模式、批处理、流处理、实时分析、数据一致性、计算引擎融合 摘要:在大数据时代,企业的需求早已从“处理海量数据”升级为“用数据实时驱动决策”。单一的批处理或流…

C# 中静态类的正确与错误用法

在 C# 开发中&#xff0c;静态类常被用作工具方法的集中地&#xff0c;例如字符串转换、日期格式化等通用逻辑。这种做法本身并没有问题&#xff0c;也符合 DRY 原则。但如果使用不当&#xff0c;尤其是为静态类引入状态或隐藏依赖&#xff0c;就会在不知不觉中埋下可维护性与线…

基于GPU加速的大数据OLAP查询优化实践

基于GPU加速的大数据OLAP查询优化实践&#xff1a;从原理到落地的全流程指南 一、引言&#xff1a;当OLAP遇到“速度瓶颈”——你经历过吗&#xff1f; 1.1 一个真实的痛点&#xff1a;大促后的“查询焦虑症” 去年双11大促结束后&#xff0c;我在电商公司的分析师朋友小张遇到…

基于GPU加速的大数据OLAP查询优化实践

基于GPU加速的大数据OLAP查询优化实践&#xff1a;从原理到落地的全流程指南 一、引言&#xff1a;当OLAP遇到“速度瓶颈”——你经历过吗&#xff1f; 1.1 一个真实的痛点&#xff1a;大促后的“查询焦虑症” 去年双11大促结束后&#xff0c;我在电商公司的分析师朋友小张遇到…

大模型预训练技术分析

一、什么是大模型预训练&#xff1f; 先明确一个核心定义&#xff1a;大模型预训练是在大规模无标注文本数据上&#xff0c;让模型通过自监督学习的方式&#xff0c;自主学习语言的底层规律和通用知识的过程。 我们可以用一个简单的比喻理解&#xff1a;如果把微调看作是“专项…

大模型预蒸馏技术原理总结

一、什么是大模型蒸馏&#xff1f;核心目标是什么&#xff1f; 首先&#xff0c;我们得明确“蒸馏”的本质&#xff1a;它是一种模型压缩与知识迁移技术&#xff0c;核心逻辑是“用大模型教小模型”。这里的“知识”&#xff0c;不只是模型在训练数据上学到的“硬标签”&#x…

全网最全研究生必备TOP8一键生成论文工具测评

全网最全研究生必备TOP8一键生成论文工具测评 学术写作工具测评&#xff1a;为何需要一份精准的2026年榜单 在研究生阶段&#xff0c;论文写作不仅是学术训练的核心环节&#xff0c;也是时间与精力投入最大的部分。面对日益繁重的科研任务&#xff0c;如何高效完成文献检索、内…

一文搞懂大模型剪枝

一、什么是大模型剪枝&#xff1f; 通俗来讲&#xff0c;大模型剪枝就是识别并移除模型中“没用”或“用处极小”的部分&#xff0c;这些被移除的部分就是模型的“冗余成分”。 我们可以把大模型想象成一个精密的工厂&#xff0c;里面有无数条生产线&#xff08;对应模型的层、…

CP2102、CH340驱动官网下载

CP2102 https://www.silabs.com/software-and-tools/usb-to-uart-bridge-vcp-drivers?tabdownloadsCH340 https://www.wch.cn/downloads/category/67.html

学霸同款2026 AI论文平台TOP8:开题报告神器测评

学霸同款2026 AI论文平台TOP8&#xff1a;开题报告神器测评 2026年学术写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着AI技术在学术领域的深入应用&#xff0c;越来越多的本科生开始依赖AI平台完成论文写作任务。然而&#xff0c;面对市场上琳琅满目的工具&am…

day131—链表—反转链表Ⅱ(区域反转)(LeetCode-92)

题目描述给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。示例 1&#xff1a;输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1…

救命神器10个AI论文软件,专科生毕业论文救星!

救命神器10个AI论文软件&#xff0c;专科生毕业论文救星&#xff01; AI 工具的崛起&#xff0c;让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的专科生开始借助 AI 工具来完成毕业论文的撰写。这些工具不仅能够帮助学生快速生成内容&#xff0c;还能有效降低 AIGC…

大模型推理知识点总结

一、 大模型推理的基本概念 先明确一个核心问题&#xff1a;什么是大模型推理&#xff1f; 简单来说&#xff0c;推理就是给定一个输入&#xff08;比如一段文字指令&#xff09;&#xff0c;让训练完成的大模型通过前向计算&#xff0c;输出符合预期结果的过程。这个过程和模型…

从「宅家创作」到「移动创作」:利用cpolar实现Stable Diffusion WebUI 远程使用的改造方案

✨道路是曲折的&#xff0c;前途是光明的&#xff01; &#x1f4dd; 专注C/C、Linux编程与人工智能领域&#xff0c;分享学习笔记&#xff01; &#x1f31f; 感谢各位小伙伴的长期陪伴与支持&#xff0c;欢迎文末添加好友一起交流&#xff01; “AI创作自由套餐”的教程已经为…

C# winform部署yolo26-pose姿态估计关键点的onnx模型演示源码+模型+说明

yolo26已经正式发布了&#xff0c;因此使用C#代码实现YOLO26-pose姿态估计的onnx模型部署&#xff0c;首先看yolo11n-pose网络结构&#xff0c;发现输出shape是1x56x8400再来看看yolo26n-pose网络结构输出&#xff0c;输出shape是1x300x57可见yolo11和yolo26输出是不一样的是不…