记录编号 |
530911 |
评测结果 |
AAAAAAAAAA |
题目名称 |
玩具 |
最终得分 |
100 |
用户昵称 |
梦那边的美好ET |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.903 s |
提交时间 |
2019-05-07 13:28:21 |
内存使用 |
17.64 MiB |
显示代码纯文本
#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;
}