suxxsfe

一言(ヒトコト)

LOJ6501「雅礼集训 2018 Day4」Cube

https://loj.ac/p/6501

考虑一个 \(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 \]

有:

\[\binom{n}{m}a^mb^{n-m}=a\times \binom{n-1}{m-1}a^{m-1}b^{n-m}+b\times \binom{n-1}{m}a^{m}b^{n-m-1} \]

所以:

\[f_{n,m}=\binom{n}{m}a^mb^{n-m}=[x^m](ax+b)^n \]

因此本题答案即为 \(\binom{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\n",fac[n]*inv[m]%mod*inv[n-m]%mod*power2[n-m]%mod);
}
	return 0;
}
posted @ 2021-10-11 19:36  suxxsfe  阅读(29)  评论(0编辑  收藏  举报