LeetCode | Weekly Contest 132 C++ 题解

先上本次contest的链接:

https://leetcode.com/contest/weekly-contest-132/

Divisor Game

本题重在分析。

首先必须明确,对于一个给定的N,其胜负结果都是确定的(否则N与比赛结果之间不存在函数关系,这道题也就没有答案了)

由于双方都按最优决策进行操作,必有如下结论:

1. 若初始数字为N时Alice先手必败,则初始数字为N时Bob先手也必败(Alice可以采取相同的策略)。

2. 进一步推出:若初始数字为N(N > 1)时Alice先手必败,则初始数字为N+1时Alice先手必胜(Alice第一步可以取1)

另外,我们注意到奇数的一个非常简单的性质:奇数的任何因子都是奇数

所以,当Alice先手面对的是奇数时,不管怎么取,必然取到奇数,而奇数-奇数=偶数,所以留给Bob的一定是一个偶数,此时Bob必然可以通过取1的方法再留给Alice一个奇数。如此循环往复,Bob总有应对策略,而必然存在某个时刻Alice面对的是那个讨厌的数字——1,此时game over,Alice输掉了。

**至此我们可以得出结论:N为奇数时Alice必败,再由结论2推出,N为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值