2018 Multi-University Training Contest 8 6397 Character Encoding(数学)

题意

给你k,用m个0到n-1的数字构成k的方案数

题解

代码

#include<bits/stdc++.h>
#define N 200005
#define P pair<int,int>
using namespace std;
typedef long long ll;
const int M=998244353;
const int inf=1e9+7;
ll pre[N],inv[N];
ll quick(ll a,ll b)
{
    ll c=1;
    while(b){
        if(b&1)c=c*a%M;
        a=a*a%M;
        b>>=1;
    }
    return c;
}
ll C(int n,int m)
{
    return pre[n]*inv[n-m]%M*inv[m]%M;
}
int main()
{
    pre[0]=inv[0]=1;
    for(int i=1;i<N;i++){
        pre[i]=pre[i-1]*i%M;
        inv[i]=quick(pre[i],M-2);
    }
    int t;
    ll n,m,k;
    for(scanf("%d",&t);t;t--)
    {
        scanf("%lld%lld%lld",&n,&m,&k);
        if((n-1)*m<k){
            puts("0");
            continue;
        }
        ll ans=0,f=1;
        for(int i=0;i<=k/n;i++){
            ans+=C(m,i)*C(m-1+k-n*i,m-1)%M*f;
            ans%=M;
            f=-f;
        }
        printf("%lld\n",(ans+M)%M);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/abutoto/article/details/81712024
今日推荐