竞赛讨论区 > Paint Box
头像
取个名字特难
发布于 2022-11-11 14:14 河北
+ 关注

Paint Box

```#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) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐