[AcWing 892] 台阶-Nim游戏

image


点击查看代码
#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;
}

  1. 结论:对奇数阶台阶,如果 a1a3an=x0,则先手必胜,否则,如果 a1a3an=0,先手必败
    证明:由经典 Nim 游戏可知,先手和后手在奇数阶台阶上的操作等价于经典的 Nim 游戏,
    如果 a1a3an=x0,则先手在奇数阶台阶可以立于不败之地,如果后手选择偶数阶台阶,将一定数量的石子放到下一阶台阶,那么先手可以在下一回合将后手放的石子放到再下一个台阶,这样就可以保证奇数阶台阶不会受到偶数阶台阶的影响,最终后手必败,同理,先手必败的情况不再解释;
  2. 选择奇数阶而不选择偶数阶的原因:
    假如对手处于偶数台阶的异或为 0 的局面,他可以通过把第一个台阶的所有石子全部放到地面上,而轮到我们的时候就只能破坏这个异或为 0 的局面(因为不能移动第 0 个台阶也就是地面,只能移动其他台阶的石子),把必胜的局面(异或为非 0)给了对手。
posted @   wKingYu  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
欢迎阅读『[AcWing 892] 台阶-Nim游戏』
点击右上角即可分享
微信分享提示