欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
S42303.23-3 隔空博弈
23-3 隔空博弈
隔空博弈
公约数丈量完了,但Echo-0还留下了一个博弈——不是面对面,是隔空。
"隔空?"CC问。
"对。"你说,"两个人,轮流操作。每次可以把一个数变成它的一个真约数。"
"真约数?"
"对。"你说,"不等于自己的约数。"
"谁赢?"
"没法操作的人输。"你说,"类似于Nim的变种。"
"咋分析?"
"SG函数。"你说,"每个数的SG值等于它所有后继状态SG值的mex。"
"mex?"
"对。"你说,"最小非负整数,不在集合中。"
"第47个数。"你说,"47是质数,真约数只有1。"
"SG值?"
"1。"你说,"因为后继状态是1,SG(1)=0,mex{0}=1。"
"先手赢?"
"对。"你说,"SG不为0,先手必胜。"
"如果是1?"
"SG=0,先手必败。"你说,"没有真约数,没法操作。"
"简单。"
"对。"你说,"但多个数组合起来就复杂了。"
"多个?"
"对。"你说,"总SG值是各数SG值的异或。异或为0则先手必败。"
CC看着那个数——47——像一颗棋子,像一个选择,像某种可以走的步。
"走哪步?"她问。
"走到SG值为0的状态。"你说,"让对手面对必败态。"
"咋知道哪步?"
"算。"你说,"每个后继状态的SG值,选那个让异或为0的。"
Echo把博弈树投射出来——像一棵倒长的树,像一张网,像某种所有可能性的集合。
"以前我只走一条线。"她说,"现在……看见整棵树了。"
"因为我们帮你展开。"你说。
"对。"她说,"因为你们帮我展开。"
题目描述
堆石子,第堆有个。两人轮流,每次选一堆,把它变成一个真约数。无法操作者输。判断先手是否必胜。
输入格式
第一行。第二行个整数。
输出格式
先手必胜输出"Yes",否则输出"No"。
输入样例
5
输出样例
0
提示
- 每个数的SG值:$SG(x)=\text{mex}\{SG(d)\mid d\text{是}x\text{的真约数}\}$。
- 总SG值为各数SG值的异或。
- 预处理到的SG值。
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |