HDU 1846:Brave Game ← SG 函数 + 巴什博奕(Bash Game)
【题目来源】http://acm.hdu.edu.cn/showproblem.php?pid1846【题目描述】十年前读大学的时候中国每年都要从国外引进一些电影大片其中有一部电影就叫《勇敢者的游戏》英文名称Zathura一直到现在我依然对于电影中的部分电脑特技印象深刻。今天大家选择上机考试就是一种勇敢brave的选择这个短学期我们讲的是博弈game专题所以大家现在玩的也是“勇敢者的游戏”这也是我命名这个题目的原因。当然除了“勇敢”我还希望看到“诚信”无论考试成绩如何希望看到的都是一个真实的结果我也相信大家一定能做到的~各位勇敢者要玩的第一个游戏是什么呢很简单它是这样定义的1、 本游戏是一个二人游戏;2、 有一堆石子一共有n个3、 两人轮流进行;4、 每走一步可以取走1…m个石子5、 最先取光石子的一方为胜如果游戏的双方使用的都是最优策略请输出哪个人能赢。【输入格式】输入数据首先包含一个正整数C(C100)表示有C组测试数据。每组测试数据占一行包含两个整数n和m1n,m1000n和m的含义见题目描述。【输出格式】如果先走的人能赢请输出“first”否则请输出“second”每个实例的输出占一行。【输入样例】223 24 3【输出样例】firstsecond【数据范围】C1001n,m1000【算法分析】● 巴什博弈Bash game是一种涉及 2 名玩家的双人博弈属于公平组合游戏ICG的典型例子。 博弈中有一堆总数为 n 的物品2 名玩家轮流从中拿取物品每次至少拿 1 件至多拿 m 件不能不拿最终将物品拿完者获胜。1n≤m 时由于一次最少拿一个最多拿 m 个甲可以一次拿完先手赢。2nm1 时无论甲拿走多少个 1~m 个剩下的都多于 1 个且少于或等于 m 个乙都能一次拿走剩余的石子后手取胜。● Bash 博弈胜负判定每次取 1m 个取走最后一个石子的胜1如果 n%(m1) 0即 n 是 m1 的整数倍那么不管甲拿多少记作 k其中 1≤k≤m乙都拿 m1-k 个使剩下的永远是 m1 的整数倍直到最后的 m1 个所以后拿的乙一定赢后手赢。2如果 n%(m1) ! 0即 n 不是 m1 的整数倍还有余数 r那么甲拿走 r 个剩下的是 m1 的倍数这样就转移到了情况1相当于甲乙互换结果是先拿的甲赢先手赢。● 巴什博弈Bash GameSG 值完整推导1游戏规则有一堆 n 个石子两人轮流取石子每次可以取 1~m 颗不能不取取走最后一颗石子者获胜。2定义SG(x) 表示剩余石子数为 x 时的 SG 函数值。3SG 函数定义SG(x) mex{ SG(y) | y 是 x 的一步后继状态 }。其中mex(S) 表示集合 S 中最小的非负整数。一步后继状态从 x 拿走 k1≤k≤m颗石子到达状态 x - k。4边界条件x0没有石子是必败态当前玩家无操作可做。没有后继状态后继集合为空集 ∅。SG(0)mex(∅)0。5计算小例子找规律设 m3每次可取 1, 2, 3 颗x1后继为 1-10后继 SG 集合为 {SG(0)}{0}则得 SG(1)mex{0}1 x2后继为 2-112-20后继 SG 集合为 {SG(1),SG(0)}{1,0}则得 SG(2)mex{0,1}2 x3后继为 3-123-213-30后继 SG 集合为 {SG(2),SG(1),SG(0)}{2,1,0}则得 SG(3)mex{0,1,2}3 x4后继为 4-134-224-31后继 SG 集合为 {SG(3),SG(2),SG(1)}{3,2,1}则得 SG(4)mex{1,2,3}0 x5后继为 5-145-235-32后继 SG 集合为 {SG(4),SG(3),SG(2)}{0,3,2}。则得 SG(5)mex{0,2,3}1 x6后继为 6-156-246-33后继 SG 集合为 {SG(5),SG(4),SG(3)}{1,0,3}。则得 SG(6)mex{0,1,3}2 x7后继为 7-167-257-34后继 SG 集合为 {SG(6),SG(5),SG(4)}{2,1,0}。则得 SG(7)mex{0,1,2}3 x8后继为 8-178-268-35后继 SG 集合为 {SG(7),SG(6),SG(5)}{3,2,1}。则得 SG(8)mex{1,2,3}0 观察规律 (m3)SG(0)0SG(1)1SG(2)2SG(3)3SG(4)0SG(5)1G(6)2SG(7)3SG(8)0…。 猜想一般式SG(n)n mod (m1)。证明略。【算法代码一SG函数写法】注意当n10^4时如下 SG 函数写法的代码是安全的。否则极易触发 Segmentation Fault 及 TLE。#include iostream #include cstring using namespace std; const int N1e35; int sg[N]; bool st[N]; void SG(int n,int m) { sg[0]0; for(int i1; in; i) { memset(st,0,sizeof st); for(int j1; jm ji; j) { st[sg[i-j]]true; } int mex0; while(st[mex]) mex; sg[i]mex; } } int main() { int T; cinT; while(T--) { int n,m; cinnm; SG(n,m); if(sg[n]!0) coutfirst\n; else coutsecond\n; } return 0; } /* in: 2 23 2 4 3 out: first second */【算法代码二非SG函数写法】#include iostream using namespace std; int main() { int T; cinT; while(T--) { int n,m; cinnm; if(n%(m1)0) { coutsecond\n; } else coutfirst\n; } return 0; } /* in: 2 23 2 4 3 out: first second */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/163572528https://blog.csdn.net/hnjzsyjyj/article/details/158802453

相关新闻

机械硬盘深度解析:从CMR/SMR原理到故障排查与维护指南

机械硬盘深度解析:从CMR/SMR原理到故障排查与维护指南

1. 项目概述:为什么我们还在谈论机械硬盘?在固态硬盘(SSD)价格不断下探、性能持续飙升的今天,再花时间研究“机械硬盘资料”这个话题,是不是有点过时了?作为一名和数据存储打了十几年交道的从业…

2026/11/1 12:28:17 阅读更多 →
Node.js性能调优实战:内存泄漏与高CPU诊断优化指南

Node.js性能调优实战:内存泄漏与高CPU诊断优化指南

1. 项目概述:为什么Node.js性能调优是门必修课 如果你正在用Node.js开发后端服务,尤其是那些需要7x24小时稳定运行的生产环境应用,那么性能问题迟早会找上门。我见过太多项目,在开发阶段一切顺风顺水,一旦上线&#xf…

2026/11/1 12:28:27 阅读更多 →
DDD核心模型解析:实体、值对象、领域服务与聚合的设计实践

DDD核心模型解析:实体、值对象、领域服务与聚合的设计实践

1. 领域驱动设计模型全景概览在软件开发的复杂世界里,我们常常面临一个核心矛盾:如何让代码忠实地反映瞬息万变的业务现实?当业务逻辑被淹没在层层技术框架和数据表结构中时,系统就变成了一个难以理解和维护的“黑盒”。这正是领域…

2026/10/29 19:04:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻