银联高校极客挑战赛 复赛(A,B,思维+数学)
发布日期:2021-05-10 16:10:15 浏览次数:26 分类:精选文章

本文共 747 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要计算两位同学在云闪付在线商城上购买饮料的方案数。他们需要购买的饮料总数是 n 瓶,其中至少有一瓶是「肥宅快乐水」。我们可以通过计算所有可能的购买方案数,然后减去不买「肥宅快乐水」的方案数来解决这个问题。

方法思路

  • 问题分析:我们需要计算购买 n 瓶饮料的方案数,且至少有一瓶是「肥宅快乐水」。我们可以通过计算所有可能的购买方案数减去不买「肥宅快乐水」的方案数来得到答案。
  • 数学公式:设云闪付的饮料种类数为 m,那么所有可能的购买方案数为 m^n。其中不买「肥宅快乐水」的方案数为 (m-1)^n。因此,满足条件的方案数为 m^n - (m-1)^n。
  • 取模运算:由于结果可能非常大,我们需要对结果取模 10^9 + 7。
  • 快速幂算法:由于 n 和 m 可以非常大,我们使用快速幂算法来高效计算大数的幂取模。
  • 解决代码

    MOD = 10**9 + 7t = int(input())for _ in range(t):    n, m, _ = map(int, input().split())    a = pow(m, n, MOD)    b = pow(m - 1, n, MOD)    ans = (a - b) % MOD    print(ans)

    代码解释

  • 读取输入:首先读取测试用例的数量 t。
  • 循环处理每个测试用例:对于每个测试用例,读取 n、m 和其他不相关的参数。
  • 计算快速幂:使用 Python 内置的 pow 函数来计算 m^n 和 (m-1)^n 的取模结果。
  • 计算结果:用所有可能的方案数减去不买「肥宅快乐水」的方案数,并对结果取模。
  • 输出结果:打印每个测试用例的结果。
  • 这个方法高效且能够处理非常大的数值,确保了计算的正确性和效率。

    上一篇:杭电2019多校第七场 HDU——6651 Final Exam(思维+简单构造)
    下一篇:2019牛客暑期多校训练营(第七场)I——Chessboard(思维+组合数)

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年05月02日 20时03分22秒