套公式题代码求调
  • 板块学术版
  • 楼主AsoltA
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/8/24 23:09
  • 上次更新2023/10/27 13:47:43
查看原帖
套公式题代码求调
475419
AsoltA楼主2022/8/24 23:09

显示老师上课讲的公式: fi=Cnii1Anini(2in1)!22ini2(2ini2)!f_i = C_{n-i}^{i-1} \cdot A_{n-i}^{n-i} \cdot \frac{(2i-n-1)!}{2^{\frac{2i-n-i}{2}} \cdot (\frac{2i-n-i}{2})!}pi=fii=1nfip_i = \frac{f_i}{\sum_{i=1}^{n}f_i} 最后输出 每一个 pip_i 。(还要mod 998244353

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int T,n,MOD=998244353;
int jc[1000001],f[1000001],p[1000001];
void init(int x)
{
	jc[0]=1;
	for(int i=1;i<=x;i++) jc[i]=jc[i-1]*i%MOD;
} 
int ksm(int x,int y,int p)
{
	int ret=1;
	while(y)
	{
		if(y&1)
		{
			ret=ret*x%p;
		}
		x=x*x%p;
		y>>=1;
	}
}
int inv(int x,int p)
{
	return ksm(x,p-2,p);
}
int C(int x,int y,int p)
{
	return jc[x]*inv(jc[y]*jc[x-y],MOD)%MOD;
}
int calcfi(int ii)
{
	int t1=C(n-ii,ii-1,MOD)*jc[n-ii]%MOD;
	int t2=inv(jc[2*ii-n-1]*inv(ksm(2,(2*ii-n-1),MOD)*jc[2*ii-n-ii]/2,MOD),MOD)%MOD;
	return t1*t2%MOD;
}
signed main()
{
	init(1e6);
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld",&n);
		for(int i=1;i<=n;i++) 
			calcfi(i);
		int avv=0;
		for(int i=1;i<=n;i++) 
			avv=(avv+f[i])%MOD;
		avv=inv(avv,MOD);
		for(int i=1;i<=n;i++) 
			p[i]=f[i]*avv%MOD;
		for(int i=1;i<=n;i++) 
			printf("%lld ",p[i]);
		printf("\n"); 
	}
	return 0;
}

求调qwq!

2022/8/24 23:09
加载中...