在O(n)的时间内求组合数、求逆元、求阶乘。·。·
#include <bits/stdc++.h>
#define pi acos(-1)
#define se second
#define fi first
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 1e9+7;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 2e5+10;;
const LL mod = 998244353;
LL fac[maxn]={1,1};
LL inv[maxn] = {1,1};
LL fi[maxn] = {1,1};
void init()
{
//cout<<mod<<endl;
for(int i=2;i<maxn;i++)
{
fac[i]=fac[i-1]*i%mod;
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
fi[i]=inv[i]*fi[i-1]%mod;
}//递推保存fac阶乘,和fi各个逆元取模相乘
}
LL C(LL a,LL b)
{
return fac[a]*fi[b]%mod*fi[a-b]%mod;//C(a,b)=a!/(b!*(a-b)!)
}
int main()
{
// calJc();
init();
int T; scanf("%d", &T);
while(T--){
LL n, m, k;
scanf("%lld%lld%lld", &n, &m, &k);
LL ans = C(m+k-1, m-1);
LL flag = -1;
for(int i=1; i<=m && k-n>=0; i++){
k-=n;
ans += C(m, m-i) * C(m+k-1, m-1) *flag % mod;
ans = (ans+mod)%mod;
flag = -flag;
}
printf("%lld\n", ans);
}
}