news 2026/8/9 16:18:10

洛谷 P4018:RoyOctober之取石子 ← 巴什博奕(Bash Game)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P4018:RoyOctober之取石子 ← 巴什博奕(Bash Game)

【题目来源】
https://www.luogu.com.cn/problem/P4018

【题目描述】
Roy 和 October 两人在玩一个取石子的游戏。
游戏规则是这样的:共有 n 个石子,两人每次都只能取 p^k 个( p 为质数,k 为自然数,且 p^k 小于等于当前剩余石子数),谁取走最后一个石子,谁就赢了。
现在 October 先取,问她有没有必胜策略。
若她有必胜策略,输出一行 October wins!;否则输出一行 Roy wins!。

【输入格式】
第一行一个正整数 T,表示测试点组数。
第 2 行~第 T+1 行,一行一个正整数 n,表示石子个数。​​​​​​​

【输出格式】
T 行,每行分别为 October wins! 或 Roy wins!。​​​​​​​

【输入样例】
3
4
9
14​​​​​​​

【输出样例】
October wins!
October wins!
October wins!​​​​​​​

【数据范围】
对于 30% 的数据,1≤n≤30;
对于 60% 的数据,1≤n≤10^6;
对于 100% 的数据,1≤n≤5×10^7, 1≤T≤10^5。

【算法分析】
● 巴什博弈(Bash game)是一种涉及 2 名玩家的双人博弈,属于公平组合游戏(ICG)的典型例子。 博弈中有一堆总数为 n 的物品,2 名玩家轮流从中拿取物品,每次至少拿 1 件,至多拿 m 件,不能不拿,最终将物品拿完者获胜。
(1)n≤m 时,由于一次最少拿一个,最多拿 m 个,甲可以一次拿完,先手赢。
(2)n=m+1 时,无论甲拿走多少个 (1~m 个),剩下的都多于 1 个且少于或等于 m 个,乙都能一次拿走剩余的石子,后手取胜。

● Bash 博弈胜负判定(每次取 1~m 个,取走最后一个石子的胜)
(1)如果
n%(m+1) == 0,即 n 是 m+1 的整数倍,那么不管甲拿多少(记作 k,其中 1≤k≤m),乙都拿 m+1-k 个,使剩下的永远是 m+1 的整数倍,直到最后的 m+1 个,所以后拿的乙一定赢(后手赢)。
(2)如果
n%(m+1) != 0,即 n 不是 m+1 的整数倍,还有余数 r,那么甲拿走 r 个,剩下的是 m+1 的倍数,这样就转移到了情况(1),相当于甲乙互换,结果是先拿的甲赢(先手赢)。

● 结合巴什博弈的核心范式来看,每次至少拿 1 件,至多拿 m 件,不能不拿,其
本质是以 M=m+1 作为模数来划分胜负态。具体而言,当石子总数为 M 的倍数时,该局面属于必败态。此时,处在必败态的玩家,无论进行哪一种合法操作,局面都必然会脱离 M 的倍数;反之,处于必胜态的玩家,则总能通过一步操作,将局面重新拉回 M 的倍数。

● 本题中,所有质数幂 p^k 模 6 的余数均属于 {1,2,3,4,5},这意味着玩家无法一次取走 6 的倍数颗石子。于是:
(1)若石子总数为 6 的倍数,则无论玩家如何操作,剩余石子数必然不再是 6 的倍数;
(2)反之,若石子总数并非 6 的倍数,先手总能取走与当前余数相对应的质数幂颗石子,从而将剩余石子数修正为 6 的倍数并交给对手。
由此可见,整套博弈逻辑完全符合巴什博弈的胜负判定规则,因此本题可视为模数 M=6 的变形巴什博弈。

【算法代码】

#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n,T; cin>>T; while(T--) { cin>>n; if(n%6!=0) cout<<"October wins!\n"; else cout<<"Roy wins!\n"; } return 0; } /* in: 3 4 9 14 out: October wins! October wins! October wins! */



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/163572528
https://blog.csdn.net/hnjzsyjyj/article/details/158802453


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 16:16:53

多模型路由:构建个人AGI助手的技术原理与Python实战

你好&#xff0c;我是 CSDN 的一名技术博主。今天我们不聊具体的代码实现&#xff0c;而是来深入探讨一个正在深刻改变我们开发方式的技术趋势&#xff1a;个人 AGI&#xff08;Artificial General Intelligence&#xff09;及其核心实现路径之一——多模型路由。无论你是对 AI…

作者头像 李华
网站建设 2026/8/9 16:14:21

深度解析电子商务网站建设复习题,带你从入门到精通,全面掌握核心考点与实战技巧

说实话,当我第一次翻开那本厚厚的电子商务专业教材,看到里面密密麻麻的关于电子商务网站建设复习题的时候,我的内心其实是崩溃的。真的,那种感觉就像是你明明想谈恋爱,结果对方塞给你一堆高数题让你解。但是,当你真正沉下心来,把这些枯燥的考点一个个啃透,你会发现,这…

作者头像 李华
网站建设 2026/8/9 16:13:47

终极开源游戏流媒体方案:Sunshine与Moonlight的完美协作指南

终极开源游戏流媒体方案&#xff1a;Sunshine与Moonlight的完美协作指南 【免费下载链接】sunshine Host for Moonlight Streaming Client 项目地址: https://gitcode.com/gh_mirrors/sun/sunshine Sunshine是一款功能强大的开源游戏流媒体主机软件&#xff0c;专门为Mo…

作者头像 李华
网站建设 2026/8/9 16:11:09

物流企业数字化财务转型:轻流平台实践解析

1. 物流行业财务管理的痛点与转型需求 物流服务公司的财务管理长期面临几个典型困境&#xff1a;首先是业务单据分散&#xff0c;从运输合同、运单到结算凭证往往散落在不同系统中&#xff1b;其次是费用核算复杂&#xff0c;涉及燃油费、过路费、司机工资等多维度成本分摊&…

作者头像 李华
网站建设 2026/8/9 16:07:53

IntelliJ IDEA集成本地LLM:离线AI编程助手配置与实战指南

1. 从云端到本地&#xff1a;一次开发体验的范式转移最近&#xff0c;JetBrains在官方博客上宣布&#xff0c;其旗舰IDE IntelliJ IDEA将正式支持在本地运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;并将其深度集成到开发工作流中。这个消息一出&#xff0c;在开发…

作者头像 李华