Post

3279 Alice And Bob Playing Flower Game

3279 Alice And Bob Playing Flower Game

Alice and Bob Playing Flower Game image

Alice and Bob are playing a turn-based game on a field, with two lanes of flowers between them. There are x flowers in the first lane between Alice and Bob, and y flowers in the second lane between them.

image

The game proceeds as follows:

1
2
3
Alice takes the first turn.
In each turn, a player must choose either one of the lane and pick one flower from that side.
At the end of the turn, if there are no flowers left at all, the **current** player captures their opponent and wins the game.

Given two integers, n and m, the task is to compute the number of possible pairs (x, y) that satisfy the conditions:

1
2
3
Alice must win the game according to the described rules.
The number of flowers x in the first lane must be in the range [1,n].
The number of flowers y in the second lane must be in the range [1,m].

Return the number of possible pairs (x, y) that satisfy the conditions mentioned in the statement.

 

Example 1:

1
2
3
4
5
**Input:** n = 3, m = 2
**Output:** 3
**Explanation:** The following pairs satisfy conditions described in the statement: (1,2), (3,2), (2,1).

Example 2:

1
2
3
4
5
**Input:** n = 1, m = 1
**Output:** 0
**Explanation:** No pairs satisfy the conditions described in the statement.

 

Constraints:

1
1 <= n, m <= 105
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

class Solution:
    def flowerGame(self, n: int, m: int) -> int:
        """
            if Alice is to win starting first
            then odd number of flowers in one lane 
            if two lanes then sum is odd ?
            does it make a diff if all are at same lane ?
            no difference just that 
            x + y is odd and 1 < x < n amd 1 < y < m
            say i use 2 loops, that would be slow
            odd + even = odd

            so find all odds in 1,n and even in 1,m 
            then multiply
            then opposite

        """
        nums_of_odd_n = (n // 2) if n % 2 == 0 else (n // 2 + 1)
        nums_of_even_n = n // 2 

        nums_of_odd_m = (m // 2) if (m % 2 == 0) else (m // 2 + 1)
        nums_of_even_m = m // 2 

        return (nums_of_odd_n * nums_of_even_m) + (nums_of_even_n * nums_of_odd_m)

        



This post is licensed under CC BY 4.0 by the author.