
银联高校极客挑战赛 复赛(A,B,思维+数学)
问题分析:我们需要计算购买 n 瓶饮料的方案数,且至少有一瓶是「肥宅快乐水」。我们可以通过计算所有可能的购买方案数减去不买「肥宅快乐水」的方案数来得到答案。 数学公式:设云闪付的饮料种类数为 m,那么所有可能的购买方案数为 m^n。其中不买「肥宅快乐水」的方案数为 (m-1)^n。因此,满足条件的方案数为 m^n - (m-1)^n。 取模运算:由于结果可能非常大,我们需要对结果取模 10^9 + 7。 快速幂算法:由于 n 和 m 可以非常大,我们使用快速幂算法来高效计算大数的幂取模。 读取输入:首先读取测试用例的数量 t。 循环处理每个测试用例:对于每个测试用例,读取 n、m 和其他不相关的参数。 计算快速幂:使用 Python 内置的 计算结果:用所有可能的方案数减去不买「肥宅快乐水」的方案数,并对结果取模。 输出结果:打印每个测试用例的结果。
发布日期:2021-05-10 16:10:15
浏览次数:26
分类:精选文章
本文共 747 字,大约阅读时间需要 2 分钟。
为了解决这个问题,我们需要计算两位同学在云闪付在线商城上购买饮料的方案数。他们需要购买的饮料总数是 n 瓶,其中至少有一瓶是「肥宅快乐水」。我们可以通过计算所有可能的购买方案数,然后减去不买「肥宅快乐水」的方案数来解决这个问题。
方法思路
解决代码
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)
代码解释
pow
函数来计算 m^n 和 (m-1)^n 的取模结果。这个方法高效且能够处理非常大的数值,确保了计算的正确性和效率。