题解/算法 {892. 台阶-Nim游戏}

题解/算法 {892. 台阶-Nim游戏}

LINK: https://www.acwing.com/problem/content/description/894/;

题解

设台阶编号为1,2,...,n, 每一次操作 即将 i i i号台阶的若干石子 移动到 i − 1 i-1 i1台阶 (地面想象成是 0 0 0号台阶), 也就是: 每次操作的两个台阶 其奇偶性是不同的;

将所有台阶分为2类: (奇数集 1,3,5,...)(偶数集 2,4,...);
此时单独看某一个集合, 即从该集合里 扔掉>0个石子, 这和 N i m Nim Nim游戏 是完全相同的!
. 但他俩不可以直接组合起来 成为一个组合游戏 (即奇数集的异或和 异或 偶数集的异或)! 因为他俩不是两个独立的游戏 (组合游戏的前提是: 各个子游戏是完全独立不影响的) 他俩是有联系的! 比如当前局面是O: [0], E: [1], 我对偶数集E操作之后 并不是变成了O[0], E[0], 而是O[1], E[0]! 因此不可以将两者组合起来;

还是要进一步分析, 由于终止态只有1个前驱节点 即[>0, 0...0] (也就是A1 > 0), 而A1是在奇数集O里的, 因此分析奇数集O:
1: 如果他的异或和是 ≠ 0 \neq 0 =0, 则根据 N i m Nim Nim定理 (从奇数集中选择某个数 将他变小后 该集合的异或和会变成0): 先手操作后 一定可以将奇数集O的异或和 变成 0 0 0;
2: 否则, 此时奇数集的异或为 0 0 0 有2种可能的操作:
. 1: 操作奇数集 根据 N i m Nim Nim定理 新的奇数集的异或和 ≠ 0 \neq 0 =0
. 2: 操作偶数集 会导致使得奇数集某个元素变大, 因为此时奇数集的异或和为 0 0 0 让其中任意元素变大 会使得新奇数集的异或和 ≠ 0 \neq 0 =0);

总结:
如果奇数集O的异或和 ≠ 0 \neq 0 =0, 那么 先手一定可以使得: 新奇数集的异或和 = 0 =0 =0;
否则, 新奇数集的异或和一定会 > 0 >0 >0;

而终止态 对应的奇数异或和 = 0 =0 =0, 因此: 奇数集异或和 = 0 =0 =0    ⟺    \iff 必败;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值