【ACM专题训练】二分法

气球消消乐

蒜头君有 n 只气球,蒜头君把气球排成一排。初始时,气球都是白色,现在蒜头君想用 m 种颜色给气球涂色,如果相邻的气球的颜色相同,这 2 个气球会发生消消乐,蒜头君希望你求出会发生消消乐的涂色方法有多少种。最后答案对 10^{12}+7 取模

输入格式

输入两个整数 n (1≤n≤12),m (1≤m≤12)

输出格式

输出一个整数表示答案。

样例输入1

2 2

样例输出1

2

样例输入2

3 4

样例输出2

28

思路:发生消除的事件数等于所有事件数(m^n),减去不发生消消乐的次数(m*((m-1)^(n-1))),即第一个气球可以涂m种颜色,剩下的气球只能涂m -1种颜色(要与前一个气球不同),采用快速幂和快速乘进行计算

mul_mod : 计算 a * b % mod的值

pow_mod :计算 a ^ b % mod的值

#include <cstdio>
#include <iostream>
using namespace std;
const long long mod = 1e12 + 7;
long long mul_mod(long long a,long long b){
    long long res = 0;
    wh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值