
点击查看代码
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int res = 0;
for (int i = 1; i <= n; i ++) {
int x;
scanf("%d", &x);
if (i % 2) res ^= x;
}
if (res) puts("Yes");
else puts("No");
return 0;
}
- 结论:对奇数阶台阶,如果 a1⊕a3⊕⋯⊕an=x≠0,则先手必胜,否则,如果 a1⊕a3⊕⋯⊕an=0,先手必败
证明:由经典 Nim 游戏可知,先手和后手在奇数阶台阶上的操作等价于经典的 Nim 游戏,
如果 a1⊕a3⊕⋯⊕an=x≠0,则先手在奇数阶台阶可以立于不败之地,如果后手选择偶数阶台阶,将一定数量的石子放到下一阶台阶,那么先手可以在下一回合将后手放的石子放到再下一个台阶,这样就可以保证奇数阶台阶不会受到偶数阶台阶的影响,最终后手必败,同理,先手必败的情况不再解释;
- 选择奇数阶而不选择偶数阶的原因:
假如对手处于偶数台阶的异或为 0 的局面,他可以通过把第一个台阶的所有石子全部放到地面上,而轮到我们的时候就只能破坏这个异或为 0 的局面(因为不能移动第 0 个台阶也就是地面,只能移动其他台阶的石子),把必胜的局面(异或为非 0)给了对手。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!