Lintcode394 Coins in a Line solution 题解

Posted rockerrrrrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lintcode394 Coins in a Line solution 题解相关的知识,希望对你有一定的参考价值。

【题目描述】

There are n coins in a line. Two players take turns to take one or two coins from right side until there are no more coins left. The player who take the last coin wins.

Could you please decide the first play will win or lose?

有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。

请判定 第一个玩家 是输还是赢?

 

【题目链接】

www.lintcode.com/en/problem/coins-in-a-line/

 

【题目解析】

其实此问题如果从另一个角度思考,就是从最后剩余1个或2个硬币时进行倒推,寻找规律:

先手输:

o o o | o o o

先手胜:

o | o o o

制胜的方法就是一定在倒数第二个回合时,让对手面对3个硬币,这样因为自己可以拿1或者2个硬币,那么无论对手选1个或者2个,己方都可以拿到最后一个硬币。这个规律就是每次让对手都面对3的倍数个硬币,那么无论对方取1个或者2个,只需要取相应的硬币数,让剩下的硬币数目保持3X,这样就能够保证取胜。对于先手而言,如果自己第一轮面对的就是3的倍数个硬币,那么对手则可以使用同样的策略让自己一方每次面对3X个硬币。于是先手是否获胜的唯一要素就是初始硬币数目,在不为3的整数倍情况下,先手都可以获胜。这样的话,算法时间复杂度和空间复杂度都为O(1)。

 

【参考答案】

www.jiuzhang.com/solutions/coins-in-a-line/


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是关于Lintcode394 Coins in a Line solution 题解的主要内容,如果未能解决你的问题,请参考以下文章

[LintCode] Coins in a Line II

[LintCode] Coins in a Line 一条线上的硬币

[LintCode] 395. Coins in a Line 2_Medium tag: Dynamic Programming, 博弈

[LeetCode] 877. Stone Game == [LintCode] 396. Coins in a Line 3_hard tag: 区间Dynamic Programming, 博弈(

Coins in a Line

Coins in a Line II