考虑一个 (n-1) 维基础图形,在第 (n) 维度上移动适当距离,轨迹即变成 (n) 维基础图形
设 (n) 维基础图形中的 (m) 维基础图形数量为 (f_{n,m})
(n-1) 维基础图形中的某一 (m) 维基础图形,会在移动的起点和终点分别出现一次,也就是 (2f_{n-1,m})
(n-1) 维基础图形中的某一 (m-1) 维基础图形,在移动过程中,他的轨迹会形成一个 (m) 维基础图形留在这个 (n) 维基础图形中,也就是 (f_{n-1,m-1})
于是有了式子:(f_{n,m}=2f_{n-1,m}+f_{n-1,m-1})
讨论如何快速计算
[f_{n,m}=af_{n-1,m-1}+bf_{n-1,m},f_{0,0}=1
]
有:
[inom{n}{m}a^mb^{n-m}=a imes inom{n-1}{m-1}a^{m-1}b^{n-m}+b imes inom{n-1}{m}a^{m}b^{n-m-1}
]
所以:
[f_{n,m}=inom{n}{m}a^mb^{n-m}=[x^m](ax+b)^n
]
因此本题答案即为 (inom{n}{m}2^{n-m})
#define mod 998244353
inline long long power(long long a,long long b){
long long ans=1;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;b>>=1;
}
return ans;
}
#define N 100006
long long fac[N],inv[N],power2[N];
int main(){
fac[0]=inv[0]=power2[0]=1;
for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%mod,power2[i]=power2[i-1]*2%mod;
inv[N-1]=power(fac[N-1],mod-2);
for(int i=N-2;i;i--) inv[i]=inv[i+1]*(i+1)%mod;
int $=read();while($--){
int n=read(),m=read();
printf("%lld
",fac[n]*inv[m]%mod*inv[n-m]%mod*power2[n-m]%mod);
}
return 0;
}