【qduoj - 纳新题】小明的dp(快速幂 + 乘法原理)(简单组合数学)

版权声明:欢迎学习我的博客,希望ACM的发展越来越好~ https://blog.csdn.net/qq_41289920/article/details/82817179

题干:

描述

小明有n种珠宝,每种无限个,他想从这些珠宝中取出m个,编成手链(长链哦),并按顺序排列起来,为了好看,相邻的珠宝不能相同。小明想知道有多少种排列的方法。

输入

第一行一个整数t代表样例个数第二行有两个正整数m,n。

1 ≤ m, n ≤ 1000

输出

第一行一个整数,表示在n种珠宝中取出m个的排列方案数模1000000007后的值

输入样例 1 

1
3 3

输出样例 1

12

解题报告:

    据说n和m的输入顺序是个坑?

AC代码:

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const ll mod = 1000000007;
ll m , n;
ll qpow(ll a,ll k) {
	ll res = 1;
	while(k) {
		if(k&1) {
			res = (res*a)%mod;
		}
		k>>=1;
		a=(a*a)%mod;
	}
	return res;
}

int main()
{
	int t;
	cin>>t;
	while(t--) {
		scanf("%lld%lld",&m,&n);
		ll ans = (n%mod)*(qpow(n-1,m-1))%mod;
		printf("%lld\n",ans%mod);
	}
	return 0 ;
}

猜你喜欢

转载自blog.csdn.net/qq_41289920/article/details/82817179