考场上因为打表打错而失去了发现杨辉三角的机会。
答案是
令a数组为选出来的数从小到大排序。
证明:令数组b[i]=a[i]+i;发现b数组均为偶数,且两两不相同。(后面总不能比前面小)
所以每个b对应一个选出来的a。
发现b数组最大是n+m,那问题就是从n+m中选m个偶数出来。
那就是答案了。
#include<bits/stdc++.h>
using namespace std;
#define in read()
#define int long long
int in{
int cnt=0,f=1;char ch=0;
while(!isdigit(ch)){
ch=getchar();if(ch=='-')f=-1;
}
while(isdigit(ch)){
cnt=cnt*10+ch-48;ch=getchar();
}return cnt*f;
}
int fac[1000003],ifac[1000003];
const int mod=998244353;
int ksm(int a,int b){
int sum=1;
while(b){
if(b&1)sum=sum*a%mod;a=a*a%mod;b>>=1;
}return sum;
}int t,n,m;
signed main(){
t=in;
fac[0]=ifac[0]=1;
for(int i=1;i<=1000000;i++)fac[i]=fac[i-1]*i%mod;
ifac[1000000]=ksm(fac[1000000],mod-2);
for(int i=999999;i>=1;i--)ifac[i]=ifac[i+1]*(i+1)%mod;
while(t--){
n=in;m=in;
cout<<fac[(n+m)/2]*ifac[m]%mod*ifac[(n+m)/2-m]%mod<<'\n';
}
return 0;
}