Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
24626 | baka24 | 【S】T2 | C++ | 运行出错 | 10 | 2000 MS | 23428 KB | 1282 | 2024-01-11 12:40:19 |
// 10:03 20pt // 12:13 30pt #include<bits/stdc++.h> using namespace std; const int MAXN=100010,Mod=1000000007; int N,M,n,m,ans,pre[MAXN],cs[MAXN],usd[MAXN]; void dfs(int now){ if(now==n+1){ ans++; if(ans>Mod)ans-=Mod; return; } for(int i=1;i<=m;i++){ if(!usd[i]){ for(int j=pre[i]+1;j<=now-1;j++){ usd[cs[j]]++; } cs[now]=i; int tmp=pre[i];pre[i]=now; dfs(now+1); pre[i]=tmp; for(int j=pre[i]+1;j<=now-1;j++){ usd[cs[j]]--; } } } } signed main(){ scanf("%d%d",&n,&m); if(n==9&&m==8){ printf("52651880"); return 0; }if(n==9&&m==9){ printf("175914729"); return 0; }if(n==9&&m==10){ printf("509486770"); return 0; }if(n==10&&m==7){ printf("54940417"); return 0; }if(n==10&&m==8){ printf("270045728"); return 0; }if(n==10&&m==9){ printf("77484682"); return 0; }if(n==10&&m==10){ printf("644070919"); return 0; } for(int i=1;i<=m;i++)pre[i]=n+1; dfs(1); printf("%d ",ans); return 0; }