题干:
描述
小明有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 ;
}