B
思路: (x+y)^n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。杨辉三角第n行的m个数可表示为 C(n-1,m-1)。
那么本题相当于(ax+by)^n 展开式各项系数。
计算C(n-1,m-1) * a^(n-m) * b ^ m 即可。
Code:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int MOD = 998244353;
const int AX = 1e5+66;
const int MAX = 1e5;
LL fac[AX];
LL inv[AX];
LL C( LL n , LL m ){
return 1LL * fac[n] * inv[m] % MOD * inv[ n - m ] % MOD;
}
LL quick( LL a, LL b ){
LL ans = 1LL;
while( b ){
if( b & 1 ) ans = ( ans * a ) % MOD;
b >>= 1 ;
a = ( a * a ) % MOD;
}
return ans ;
}
int main(){
int T;
LL a , b , n , m ;
fac[0] = 1 ;
for( int i = 1 ; i <= MAX ; i++ ){
fac[i] = 1LL * fac[i-1] * i % MOD ;
}
inv[MAX] = quick( fac[MAX] , MOD - 2 ) ;
for( LL i = MAX - 1 ; i >= 0 ; i-- ){
inv[i] = ( inv[i+1] * ( i + 1 ) ) % MOD;
}
scanf("%d",&T);
while( T-- ){
scanf("%lld%lld%lld%lld",&a,&b,&n,&m);
LL res = C( --n , --m ) % MOD;
res = ( 1LL * res * quick( a , n - m ) % MOD * quick( b , m ) % MOD );
printf( "%lld\n" , res );
}
return 0 ;
}