HDU 5399
来源:互联网 发布:android json 编辑:程序博客网 时间:2024/06/05 21:11
题意:给你n个数字,m个函数。每个函数满足,f1(f2(⋯fm(i)))=i
f1(f2(⋯fm
(i)))=i
fifi
然后有可能函数的不给你,就是写出来-1.
让你自己给-1那行赋值,问你有多少种可能。
只有一个-1的时候肯定是1。
但是没有-1的时候还要看给你的函数 满不满足条件。
-1有k个。1行的种是N!个。
最后一个-1可以被其他已经赋值的-1确定。最后结果是N !^(k-1).
<span style="font-family: 'Times New Roman';">#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int mod=1e9+7;int num[101][111];int dfs(int m,int x,int j){ //printf("%d %d %d\n",m,x,j); if(m==0) { if(x==j)return 1; return 0; } return dfs(m-1,num[m-1][x]-1,j);}int main(){ int n,m,x,kj; long long sum=0; while(scanf("%d%d",&n,&m)!=EOF) { sum=1; kj=0; for(int i=0; i<m; i++) for(int j=0; j<n; j++) { scanf("%d",&num[i][j]); if(num[i][j]==-1) { kj++; break; } } bool flag=true; int f[1001]; for(int i=0; i<m; i++) { if(num[i][0]==-1) continue; memset(f,0,sizeof(f)); for(int j=0; j<n; j++) { f[num[i][j]]++; if(f[num[i][j]]>1) flag=false; } } if(kj==0) for(int i=0; i<n; i++) { int t1=dfs(m-1,num[m-1][i]-1,i); if(!t1) flag=false; //printf("t1=%d\n",t1); } // printf("%d\n",flag); if(flag==false) { puts("0"); continue; } if(kj<=1) { printf("1\n"); } else { long long s=1; for(int i=1; i<=n; i++) { s*=i; s%=mod; } for(int i=1; i<kj; i++) { sum*=s; sum%=mod; } printf("%lld\n",sum); } } return 0;}</span>
(i)))=i
0 0
- HDU 5399
- HDU 5399 Too Simple
- HDU 5399 Too Simple
- HDU 5399(简单数学)
- hdu 5399 Too Simple
- hdu 5399(数学推理)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- 分词器之NLPIR加密文件在哪
- IK分词加入标点符号
- 斯特林数 组合数
- hdu5399(2015多校9)--Too Simple
- 总线设备驱动模型——设备篇
- HDU 5399
- C语言之文件操作06——写数据到文本文件遇0停止
- dinic 模板
- WPF中StaticResource 标记扩展和DynamicResource 标记扩展
- [algorithm] graph algorithm
- 图形验证码(JSP+Servlet)
- 10个前端开发必备的工具或使用方法
- 总线设备驱动模型——驱动篇
- Struct与Class的区别