返回介绍

solution / 3000-3099 / 3021.Alice and Bob Playing Flower Game / README_EN

发布于 2024-06-17 01:02:57 字数 6747 浏览 0 评论 0 收藏 0

3021. Alice and Bob Playing Flower Game

中文文档

Description

Alice and Bob are playing a turn-based game on a circular field surrounded by flowers. The circle represents the field, and there are x flowers in the clockwise direction between Alice and Bob, and y flowers in the anti-clockwise direction between them.

The game proceeds as follows:

  1. Alice takes the first turn.
  2. In each turn, a player must choose either the clockwise or anti-clockwise direction and pick one flower from that side.
  3. 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:

  • Alice must win the game according to the described rules.
  • The number of flowers x in the clockwise direction must be in the range [1,n].
  • The number of flowers y in the anti-clockwise direction 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:

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:

Input: n = 1, m = 1
Output: 0
Explanation: No pairs satisfy the conditions described in the statement.

 

Constraints:

  • 1 <= n, m <= 105

Solutions

Solution 1: Mathematics

According to the problem description, in each move, the player will choose to move in a clockwise or counterclockwise direction and then pick a flower. Since Alice moves first, when $x + y$ is odd, Alice will definitely win the game.

Therefore, the number of flowers $x$ and $y$ meet the following conditions:

  1. $x + y$ is odd;
  2. $1 \le x \le n$;
  3. $1 \le y \le m$.

If $x$ is odd, $y$ must be even. At this time, the number of values of $x$ is $\lceil \frac{n}{2} \rceil$, the number of values of $y$ is $\lfloor \frac{m}{2} \rfloor$, so the number of pairs that meet the conditions is $\lceil \frac{n}{2} \rceil \times \lfloor \frac{m}{2} \rfloor$.

If $x$ is even, $y$ must be odd. At this time, the number of values of $x$ is $\lfloor \frac{n}{2} \rfloor$, the number of values of $y$ is $\lceil \frac{m}{2} \rceil$, so the number of pairs that meet the conditions is $\lfloor \frac{n}{2} \rfloor \times \lceil \frac{m}{2} \rceil$.

Therefore, the number of pairs that meet the conditions is $\lceil \frac{n}{2} \rceil \times \lfloor \frac{m}{2} \rfloor + \lfloor \frac{n}{2} \rfloor \times \lceil \frac{m}{2} \rceil$, which is $\lfloor \frac{n + 1}{2} \rfloor \times \lfloor \frac{m}{2} \rfloor + \lfloor \frac{n}{2} \rfloor \times \lfloor \frac{m + 1}{2} \rfloor$.

The time complexity is $O(1)$, and the space complexity is $O(1)$.

class Solution:
  def flowerGame(self, n: int, m: int) -> int:
    a1 = (n + 1) // 2
    b1 = (m + 1) // 2
    a2 = n // 2
    b2 = m // 2
    return a1 * b2 + a2 * b1
class Solution {
  public long flowerGame(int n, int m) {
    long a1 = (n + 1) / 2;
    long b1 = (m + 1) / 2;
    long a2 = n / 2;
    long b2 = m / 2;
    return a1 * b2 + a2 * b1;
  }
}
class Solution {
public:
  long long flowerGame(int n, int m) {
    long long a1 = (n + 1) / 2;
    long long b1 = (m + 1) / 2;
    long long a2 = n / 2;
    long long b2 = m / 2;
    return a1 * b2 + a2 * b1;
  }
};
func flowerGame(n int, m int) int64 {
  a1, b1 := (n+1)/2, (m+1)/2
  a2, b2 := n/2, m/2
  return int64(a1*b2 + a2*b1)
}
function flowerGame(n: number, m: number): number {
  const [a1, b1] = [(n + 1) >> 1, (m + 1) >> 1];
  const [a2, b2] = [n >> 1, m >> 1];
  return a1 * b2 + a2 * b1;
}

Solution 2: Mathematics (Optimized)

The result obtained from Solution 1 is $\lfloor \frac{n + 1}{2} \rfloor \times \lfloor \frac{m}{2} \rfloor + \lfloor \frac{n}{2} \rfloor \times \lfloor \frac{m + 1}{2} \rfloor$.

If both $n$ and $m$ are odd, then the result is $\frac{n + 1}{2} \times \frac{m - 1}{2} + \frac{n - 1}{2} \times \frac{m + 1}{2}$, which is $\frac{n \times m - 1}{2}$.

If both $n$ and $m$ are even, then the result is $\frac{n}{2} \times \frac{m}{2} + \frac{n}{2} \times \frac{m}{2}$, which is $\frac{n \times m}{2}$.

If $n$ is odd and $m$ is even, then the result is $\frac{n + 1}{2} \times \frac{m}{2} + \frac{n - 1}{2} \times \frac{m}{2}$, which is $\frac{n \times m}{2}$.

If $n$ is even and $m$ is odd, then the result is $\frac{n}{2} \times \frac{m - 1}{2} + \frac{n}{2} \times \frac{m + 1}{2}$, which is $\frac{n \times m}{2}$.

The above four cases can be combined into $\lfloor \frac{n \times m}{2} \rfloor$.

The time complexity is $O(1)$, and the space complexity is $O(1)$.

class Solution:
  def flowerGame(self, n: int, m: int) -> int:
    return (n * m) // 2
class Solution {
  public long flowerGame(int n, int m) {
    return ((long) n * m) / 2;
  }
}
class Solution {
public:
  long long flowerGame(int n, int m) {
    return ((long long) n * m) / 2;
  }
};
func flowerGame(n int, m int) int64 {
  return int64((n * m) / 2)
}
function flowerGame(n: number, m: number): number {
  return Number(((BigInt(n) * BigInt(m)) / 2n) | 0n);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文