挺有意思的一道题...
code:
#include <bits/stdc++.h>
using namespace std;
#define N 5000006
#define mod 998244353
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
int fac[N],inv[N],f[N],qpow[N],jv[N];
void Initialize()
{
int i,j;
f[0]=inv[0]=inv[1]=fac[0]=qpow[0]=jv[0]=1ll;
for(i=1;i<N;++i) fac[i]=(ll)fac[i-1]*i%mod;
for(i=1;i<N;++i) qpow[i]=1ll*qpow[i-1]*2ll%mod;
for(i=2;i<N;++i) inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;
for(i=1;i<N;++i) jv[i]=1ll*jv[i-1]*inv[i]%mod;
for(i=1;i<N;++i) f[i]=2ll*(i-1)%mod*(f[i-1]+(i==1?0:f[i-2]))%mod;
}
inline int C(int x,int y)
{
return 1ll*fac[x]*jv[y]%mod*jv[x-y]%mod;
}
int main()
{
// setIO("input");
Initialize();
int T,i,j,n,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
// printf("%d\n",f[n-k]);
printf("%d\n",1ll*qpow[n]*C(n,k)%mod*C(n,k)%mod*fac[k]%mod*fac[n-k]%mod*f[n-k]%mod);
}
return 0;
}

被折叠的 条评论
为什么被折叠?



