解析:
展开时候就会发现f[n][1-n]的各项其实对应(a+b)^(n-1)的每一项
所以这里就需要用到组合数的求解 组合数求法
#include <bits/stdc++.h>
typedef long long int lli;
#define MOD 998244353
const int MAXN = 1e5+10;
lli jc[MAXN];
lli quick(lli a,int n)
{
lli ans=1;
while(n)
{
if(n&1) ans=((ans%MOD)*(a%MOD))%MOD;
n=n>>1;
a=((a%MOD)*(a%MOD))%MOD;
}
return ans%MOD;
}
//费马小定理求逆元
lli pow(lli a, lli n, lli p) //快速幂 a^n % p
{
lli ans = 1;
while(n)
{
if(n & 1) ans = ans * a % p;
a = a * a % p;
n >>= 1;
}
return ans;
}
lli niYuan(lli a, lli b) //费马小定理求逆元
{
return pow(a, b - 2, MOD);
}
lli C(lli a, lli b) //计算C(a, b)
{
return jc[a] * niYuan(jc[b], MOD) % MOD
* niYuan(jc[a - b], MOD) % MOD;
}
int main()
{
int t;
scanf("%d",&t);
lli p=1;
jc[0]=1;
for(int i=1;i<MAXN;i++)
{
p=(p*i)%MOD;
jc[i]=p;
}
while(t--)
{
lli a,b;
int n,m;
scanf("%lld%lld%d%d",&a,&b,&n,&m);
lli part1=quick(a,n-m);
lli part2=quick(b,m-1);
if(m>1&&m<n)
printf("%lld\n",(((part1%MOD)*(part2%MOD)%MOD)*C(n-1,m-1))%MOD);
else
printf("%lld\n",((part1%MOD)*(part2%MOD))%MOD);
}
return 0;
}