Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
6567 18级赵嘉熠 2021北京队选拔模拟赛1-B C++ 运行出错 0 0 MS 260 KB 1586 2021-04-03 17:23:49

Tests(0/10):


#include<bits/stdc++.h> using namespace std; const int N=1005; int n,m,ans,a[N]; int f[N][N];//f[i][j]表示前i个数的排列包含j对非法相邻数的方案数(i存在于非法相邻数对中) int g[N][N];//g[i][j]表示前i个数的排列包含j对非法相邻数的方案数(i不存在于非法相邻数对中) int main(){ freopen("a.in","r",stdin); //freopen("a.out","w",stdout); while(cin>>n>>m){ for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ f[i][j]=0; g[i][j]=0; } } f[1][0]=1; for(int i=1;i<=n;i++){ for(int j=0;j<i;j++){ if(f[i][j]){ g[i+1][j+1]+=f[i][j]*2%m; g[i+1][j+1]%=m; if(j){ f[i+1][j-1]+=f[i][j]*j%m,f[i+1][j-1]%=m; } if(i-j-1){ f[i+1][j]+=f[i][j]*(i-j-1)%m,f[i+1][j]%=m; } } if(g[i][j]){ g[i+1][j+1]+=g[i][j],g[i+1][j+1]%=m; g[i+1][j]+=g[i][j],g[i+1][j]%=m; if(j-1){ f[i+1][j-1]+=g[i][j]*(j-1)%m; f[i+1][j-1]%=m; } if(i-j){ f[i+1][j]+=g[i][j]*(i-j)%m; f[i+1][j]%=m; } } } } cout<<f[n][0]%m<<endl; } return 0; }


测评信息: