当前位置: 首页 > news >正文

AcWing 892:台阶 ← Nim博弈

【题目来源】
https://www.acwing.com/problem/content/894/

【题目描述】
现在,有一个 n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i 级台阶上有 ai 个石子(i≥1)。
两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。
已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

【输入格式】
第一行包含整数 n。
第二行包含 n 个整数,其中第 i 个整数表示第 i 级台阶上的石子数 ai。

【输出格式】
如果先手方必胜,则输出 Yes。
否则,输出 No。​​​​​​​

【输入样例】
3
2 1 3​​​​​​​

【输出样例】
Yes

【数据范围】
1≤n≤10^5,
1≤ai≤10^9​​​​​​​

【算法分析】
● Nim 博弈定理:对于任意的 {a1, a2, a3, …, an},若 S=a1⊕a2⊕a3⊕⋯⊕an 的值不等于 0,先手必胜,记为 N-position(先手必胜态)。若 S=a1⊕a2⊕a3⊕⋯⊕an 的值等于 0,先手必败,记为 P-position(先手必败态)。

● 台阶 Nim(Staircase Nim):设有编号为 0,1,2,…,n 的台阶,其中 0 号为地面。每个台阶上放有若干枚石子。两名玩家轮流操作。每次操作,任选一个台阶 i(i≥1),将该台阶上任意数量的石子移动到台阶 i−1 上。将最后一枚石子移到 0 号地面的玩家获胜。

设台阶 Nim 中奇数台阶上的石子数为 a1, a3, a5, …。且令 S=a1⊕a3⊕a5⊕…,若 S≠0,则当前局面为先手必胜态(N-position)。若 S=0,则当前局面为先手必败态(P-position)
证明:任何一步,只能把石子从台阶 i 移到 i−1。分两种情况讨论:
情况 A:操作发生在偶数台阶 i
从偶数台阶 i 移石子至奇数台阶 i−1,会使该奇数台阶石子数增加,看似改变 S。但后手可立即将这些石子从 i−1(奇数台阶)继续移至 i−2(偶数台阶),使所有奇数台阶的石子数复原,S 保持不变。这意味着:偶数台阶上的任何操作都可以被后手抵消,不影响最终胜负。
情况 B:操作发生在奇数台阶 i
从奇数台阶 i 移石子至偶数台阶 i−1,等价于在经典 Nim 游戏中从对应堆里移除若干石子。因为移入偶数台阶的石子会进入可被抵消的区域,不再对胜负产生实质影响。因此,只有奇数台阶石子数的变化,才真正决定局面走向。
综上,台阶 Nim 等价于仅以奇数台阶为石子堆的经典 Nim 游戏。

● 异或运算的基本性质(https://blog.csdn.net/hnjzsyjyj/article/details/154304346
异或运算(XOR)具有以下重要性质:
交换律‌:a ^ b = b ^ a
结合律‌:a ^ (b ^ c) = (a ^ b) ^ c
自反性‌:a ^ a = 0
零元素‌:a ^ 0 = a
可逆性‌:如果 a ^ b = c,那么 a = c ^ b

【算法代码】

#include <bits/stdc++.h>
using namespace std;int main() {int n,t=0;cin>>n;for(int i=1; i<=n; i++) {int x;cin>>x;if(i&1) t^=x;}if(t==0) cout<<"No\n";else cout<<"Yes\n";return 0;
}/*
in:
3
2 1 3out:
Yes
*/





【参考文献】
https://www.acwing.com/solution/content/13187/
https://blog.csdn.net/hnjzsyjyj/article/details/154304346
https://www.acwing.com/file_system/file/content/whole/index/content/12084580/
https://blog.csdn.net/hnjzsyjyj/article/details/158704426
https://blog.csdn.net/hnjzsyjyj/article/details/154310120





 

http://www.jsqmd.com/news/442477/

相关文章:

  • IP地址数据 赋能社交行业精细化运营与智能匹配
  • python+flask的读书分享评论vue书评
  • 讲讲温度记录仪选购要点,价格和性价比怎么平衡? - 工业品牌热点
  • Clawdbot与ESMAP数字孪生技能融合分析
  • python+flask的车辆违章管理系统-vue
  • Gartner:CMO面临将品牌锁定在代理机构人工智能平台的风险
  • Acunetix v26.02.24 发布,新增功能简介
  • 计算机毕业设计java基于Java的在线家庭语数外作业系统的设计与实现 基于SpringBoot的K12在线作业布置与批改管理平台 设计中小学语数外课程作业发布与学习进度跟踪系统的研发
  • OpenClaw新手必看!推荐10个神器技能包
  • AI生成图片R18提示词:新手入门指南与最佳实践
  • 数字迷雾:AI模糊了真实与虚拟的边界!
  • python+flask的基于WEB的评价指标量化评分系统的设计与实现-vue
  • Voila音频重生:多语言语音模型崛起[特殊字符]
  • 化妆品包装情感设计 Checklist + 2026年差异化组合方案 - 宏洛图品牌设计
  • python+flask的大学生兼职就业求职招聘管理系统hg241-vue
  • AI专著撰写不用愁!精选工具助力,快速生成专业学术大作
  • python+flask的教学成果投票系统vue
  • 牛客刷题-Day34
  • 【开题答辩全过程】以 基于大数据分析的手机产品推荐系统为例,包含答辩的问题和答案
  • python+flask的智慧农场农用工具商城管理系统vue农具
  • 支付网关服务架构设计
  • 2026年GEO优化方案推荐,广州深圳地区靠谱的品牌有哪些 - 工业品网
  • 【开题答辩全过程】以 基于springBoot微服务架构的老年人社交系统的设计与实现为例,包含答辩的问题和答案
  • 基于IP地址数据的网络性能优化实践
  • 毕业论文初稿怎么写?5款写论文的AI排行榜,轻松掌握毕业论文! - 掌桥科研-AI论文写作
  • Autojs基础-悬浮窗(floaty)
  • IP归属地数据赋能在线用户匹配:构建精准、高效的社交连接
  • AI专著撰写新玩法!揭秘高效工具,让专著写作不再是难题
  • 计算机毕业设计java基于JAVA的渝行旅游热点推荐系统 基于SpringBoot的重庆旅游智能推荐与攻略服务平台设计 渝行文旅信息整合与个性化推荐系统的研发
  • 用 OpenClaw + DeepSeek + Ollama 自动 Review Spring Boot 项目代码