```#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
using pll = pair<ll, ll>;
const ll mod = 1e9 + 7;
long long qpow(long long n, long long m)
{
if (n == 0 || n == 1)
return n;
long long ans = 1;
while (m)
{
if (m & 1)
ans = ans * n % mod;
n = n * n % mod;
m >>= 1;
}
return ans % mod;
}
const int N = 1e6 + 20;
long long int da[N], db[N];
long long (long long n, long long m)
{
if (n <= m)
return 1;
return da[n] * db[n - m] % mod * db[m] % mod;
}
void dilingtian()
{
long long n, m, k;
cin >> n >> m >> k;
if (n == 1)
{
if (k == 1)
cout << m << endl;
else
cout << 0 << endl;
return;
}
long long x = 1;
if((k-1)%2)
x=-1;
long long ans = 0;
for (long long i = 1; i <= k; i++)
{
ans = (ans + x * C(k, i) * i % mod * qpow(i - 1, n - 1) % mod + mod) % mod;
x *= -1;
}
for (ll i = m - k + 1; i <= m; i++)
ans = ans * i % mod;
ans = ans * db[k] % mod;
cout << (ans + mod) % mod << endl;
}
int main(void)
{
da[0] = 1, db[0] = 1;
for (int i = 1; i <= N; i++)
{
da[i] = da[i - 1] * i % mod;
db[i] = db[i - 1] * qpow(i, mod - 2) % mod;
}
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
dilingtian();
return 0;
}
无法编译,大佬们有知道我哪里错了吗?特急!
全部评论
(0) 回帖