牛客14718 开心的涂刷

链接:https://ac.nowcoder.com/acm/problem/14718
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

一天小明同学拿着m种颜色的油漆去涂刷n块格子,在涂刷的过程中他发现有很多种涂色方案,并很快的算出了答案,然后他发现如果涂好颜色的格子中只要存在某两个相邻的格子颜色一样,他就会感到开心,他想知道有多少种让他开心的涂刷方案。

输入描述:

输入仅包含一行,包含两个数n,m分别表示格子数和颜色数。(1 <= n <= 1e12, 1 <= m <= 1e12)

输出描述:

输出一行包含一个整数,让小明开心的涂刷方案数。 答案对1000000007取模

在这里插入图片描述
一共有 mn个中所有的方案,我们只需要减去任意两个相邻的都不相同的即可,
考虑第一位,可以染色的可能有m种,如果第一位染了m种其中一种颜色,
那么第二位,只有m-1个选择,同理第三位,还是有m-1个选择,
因为第一位的颜色还可以选,所以所有的可能应该为:mn−m∗(m−1)n−1,直接快速幂即可

"""
一共有 mn个中所有的方案,我们只需要减去任意两个相邻的都不相同的即可,
  考虑第一位,可以染色的可能有m种,如果第一位染了m种其中一种颜色,
  那么第二位,只有m-1个选择,同理第三位,还是有m-1个选择,
  因为第一位的颜色还可以选,所以所有的可能应该为:mn−m∗(m−1)n−1,直接快速幂即可
"""
n, m = list(map(int, input().split()))

MODULE = 1000000007
ans = pow(m, n, MODULE) - m * pow(m - 1, n - 1, MODULE)
print(ans % MODULE)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值