Asunto:
https://ac.nowcoder.com/acm/problem/15251
Se sabe que f (1, 1) = 1 f (1,1) = 1f ( 1 ,1 )=1, 有
f (i, j) = a ∗ f (i - 1, j) + b ∗ f (i - 1, j - 1) yo ≥ 2, 1 ≤ j ≤ si (i, j) = a * f (i-1, j) + b * f (i-1, j-1) \ quad i \ ge 2,1 \ le j \ le if ( yo ,j )=un∗f ( yo-1 ,j )+segundo∗f ( yo-1 ,j-1 )yo≥2 ,1≤j≤i Para otros casosf (i, j) = 0 f (i, j) = 0f ( yo ,j )=0
tieneTTEl grupo T pregunta, cada vez quese dan a, b, n, ma, b, n, muna ,b ,n ,m, 求f (n, m) mod (998244353) f (n, m) mod (998244353)f ( n ,m ) m o d ( 9 9 8 2 4 4 3 5 3 )
Idea:
Similar al Problema F: Fórmula espantosa , excepto que gira hacia abajo para bajar a la derecha, la posición inicial es (1, 1) (1,1)( 1 ,1 ) , entonces el número de opciones es(n - 1 m - 1) {n-1 \ elija m-1}(m - 1n - 1) . Entoncesf (1, 1) f (1,1)f ( 1 ,La contribución de 1 ) esbm - 1 an - m (n - 1 m - 1) b ^ (m-1) a ^ (nm) (n-1 \ elija m-1)segundom - 1 an - m (m - 1n - 1)。
#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
using namespace std;
const int N=100009;
int T;
ll p[N],p1[N];
ll qpow(ll a,ll b) {
ll res=1;
a%=mod;
while(b) {
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main() {
cin>>T;
p[0]=1;
for(int i=1; i<N; i++)
p[i]=p[i-1]*i%mod;
p1[N-1]=qpow(p[N-1],mod-2);
for(int i=N-2; i>=0; i--)
p1[i]=p1[i+1]*(i+1)%mod;
while(T--) {
ll a,b,n,m;
cin>>a>>b>>n>>m;
if(n>=1&&m>=1&&m<=n)
cout<<qpow(b,m-1)*qpow(a,n-m)%mod*p[n-1]%mod*p1[m-1]%mod*p1[n-m]%mod<<endl;
else
cout<<0<<endl;
}
return 0;
}