题目链接:https://vjudge.net/problem/HDU-6397
思路:就k个相同的小球放m个相同的篮子有几种放法 ,隔板法,真菜,想了30分钟才想出来,然后容斥的时候被ans-=WA成傻逼
AC代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#define N 230030
#define mod 998244353
using ll=long long;
long long fac[N+307];
long long inv[N+307];
int n,m,k;
long long quick_pow(long long t,long long p)
{
long long ans=1;
while(p)
{
if(p&1)
ans=ans*t%mod;
t=t*t%mod;
p>>=1;
}
return ans%mod;
}
void init()
{
fac[0]=1;
fac[1]=1;
for(int i=2;i<=N;++i)
fac[i]=fac[i-1]*i%mod;
inv[N]=quick_pow(fac[N],mod-2);
for(int i=N-1;i>=0;--i)
inv[i]=(i+1)*inv[i+1]%mod;
}
long long C(int x,int y)
{
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d",&n,&m,&k);
if(k==0)
{
cout<<1<<endl;
continue;
}
if((ll)(n-1)*m<k)
{
cout<<0<<endl;
continue;
}
int res=k/n;
m--;
long long ans=0;
for(int i=0;i<=res;++i)
{
int temp=k-i*n;
if(i&1)
ans=(ans+mod-(((fac[m+temp]*inv[m])%mod*inv[temp])%mod*C(m+1,i))%mod)%mod;//-=被WA成傻逼
else
ans=((((fac[m+temp]*inv[m])%mod*inv[temp])%mod*C(m+1,i))%mod+ans)%mod;
}
cout<<ans<<endl;
}
return 0;
}