比赛 2019.3.13 评测结果 AAAAAAAAAA
题目名称 玩具 最终得分 100
用户昵称 梦那边的美好ET 运行时间 0.894 s
代码语言 C++ 内存使用 17.64 MiB
提交时间 2019-05-07 13:28:33
显示代码纯文本
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#define LL long long
#define maxn 510
using namespace std;
int n;
LL mod,ans,a1[maxn],a2[maxn],f[maxn][maxn],g[maxn][maxn];
LL C(int n,int m){return n<m||n<0||m<0?0:a1[n]*a2[m]%mod*a2[n-m]%mod;}
int main(){
	freopen("toyy.in","r",stdin);
	freopen("toyy.out","w",stdout);
	scanf("%d%lld",&n,&mod);
	a1[0]=a2[0]=a1[1]=a2[1]=1;
	for(int i=1;i<=n;i++)a1[i]=a1[i-1]*i%mod;
	for(int i=2;i<=n;i++)a2[i]=(mod-mod/i*a2[mod%i]%mod)%mod;
	for(int i=1;i<=n;i++)a2[i]=a2[i-1]*a2[i]%mod;
	g[1][0]=1;
	for(int i=0;i<=n;i++)f[1][i]=1;
	for(int d=1;d<=n;d++){
		for(int i=2;i<=n;i++)
			for(int j=1;j<i;j++)f[i][d]=(f[i][d]+f[i-j][d]*f[j][d-1]%mod*C(i-2,j-1))%mod;
		for(int i=1;i<=n;i++)g[i][d]=(f[i][d]-f[i][d-1]+mod)%mod;
	}
	for(int i=1;i<=n;i++)ans=(ans+g[n][i]*i%mod)%mod;
	ans=ans*a2[n-1]%mod;
	printf("%d\n",ans);
	return 0;
}