January 05, 2021 - leetcode

1025. Divisor Game

Question

Alice and Bob take turns playing a game, with Alice starting first.

Initially, there is a number N on the chalkboard. On each player’s turn, that player makes a move consisting of:

Also, if a player cannot make a move, they lose the game.

Return True if and only if Alice wins the game, assuming both players play optimally.

Example 1:

Input: 2
Output: true
Explanation: Alice chooses 1, and Bob has no more moves.

Example 2:

Input: 3
Output: false
Explanation: Alice chooses 1, Bob chooses 1, and Alice has no more moves.

Note:



Summary

Given an odd number, after subtract a factor, it can only become an even number.

Given an even number, after subtract a factor, it can become either odd or even number.

                +---+
                V   |
(ODD) <====> (EVEN) |
                |   |
                +---+

If we can finally make Alice to meet number 2 before her start, she will always win. So we need to make Bob always face odd number.

Given an even number, Alice can make it odd and pending Bob to take number. Given an odd number, Alice cannot make it odd.



Solution

class Solution {
public:
    bool divisorGame(int N) {
        return N % 2 == 0;
    }
};