Leetcode3021. Alice 和 Bob 玩鲜花游戏

Every day a Leetcode

题目来源:3021. Alice 和 Bob 玩鲜花游戏

解法1:数学

Alice 和 Bob 在一个长满鲜花的环形草地玩一个回合制游戏。环形的草地上有一些鲜花,Alice 到 Bob 之间顺时针有 x 朵鲜花,逆时针有 y 朵鲜花。

游戏过程如下:

  1. Alice 先行动。
  2. 每一次行动中,当前玩家必须选择顺时针或者逆时针,然后在这个方向上摘一朵鲜花。
  3. 一次行动结束后,如果所有鲜花都被摘完了,那么当前玩家抓住对手并赢得游戏的胜利。

给你两个整数 n 和 m ,你的任务是求出满足以下条件的所有 (x, y) 对:

  • 按照上述规则,Alice 必须赢得游戏。
  • Alice 顺时针方向上的鲜花数目 x 必须在区间 [1,n] 之间。
  • Alice 逆时针方向上的鲜花数目 y 必须在区间 [1,m] 之间。

请你返回满足题目描述的数对 (x, y) 的数目。

显然,因为是 Alice 先行动,当 x+y 为奇数时,Alice 会摘完最后一朵鲜花,抓住对手并赢得游戏的胜利。

x+y 为奇数有两种情况:

  1. x 为奇数,y 为偶数
  2. x 为偶数,y 为奇数

在 [1,n] 区间内,有 n/2 个偶数,(n+1)/2 个奇数。

所以最终答案为 (n / 2) * ((m + 1) / 2) + ((n + 1) / 2) * (m / 2)。

代码:

/*
 * @lc app=leetcode.cn id=3021 lang=cpp
 *
 * [3021] Alice 和 Bob 玩鲜花游戏
 */

// @lc code=start

// Time Limit Exceeded

// class Solution
// {
// public:
//     long long flowerGame(int n, int m)
//     {
//         long long count = 0;
//         for (int x = 1; x <= n; x++)
//             for (int y = 1; y <= m; y++)
//                 if ((x + y) ^ 0x1)
//                     count++;
//         return count / 2;
//     }
// };

class Solution
{
public:
    long long flowerGame(int n, int m)
    {
        return (long long)(n / 2) * ((m + 1) / 2) +
               (long long)((n + 1) / 2) * (m / 2);
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(1)。

空间复杂度:O(1)。

解法2:数学

在这里插入图片描述

代码:

// 数学

class Solution
{
public:
    long long flowerGame(int n, int m)
    {
        return (long long)n * m / 2;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(1)。

空间复杂度:O(1)。

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值