hdu5399 Too simple
来源:互联网 发布:淘宝网店押金 编辑:程序博客网 时间:2024/05/17 08:29
*Problem Description*
Rhason Cheung had a simple problem, and asked Teacher Mai for help. But Teacher Mai thought this problem was too simple, sometimes naive. So she ask you for help.
Teacher Mai has m functions f1,f2,⋯,fm:{1,2,⋯,n}→{1,2,⋯,n}(that means for all x∈{1,2,⋯,n},f(x)∈{1,2,⋯,n}). But Rhason only knows some of these functions, and others are unknown.
She wants to know how many different function series f1,f2,⋯,fm there are that for every i(1≤i≤n),f1(f2(⋯fm(i)))=i. Two function series f1,f2,⋯,fm and g1,g2,⋯,gm are considered different if and only if there exist i(1≤i≤m),j(1≤j≤n),fi(j)≠gi(j).
Input
For each test case, the first lines contains two numbers n,m(1≤n,m≤100).
The following are m lines. In i-th line, there is one number −1 or n space-separated numbers.
If there is only one number −1, the function fi is unknown. Otherwise the j-th number in the i-th line means fi(j).
Output
For each test case print the answer modulo 109+7.
Sample Input
3 3
1 2 3
-1
3 2 1
Sample Output
1
Hint
The order in the function series is determined. What she can do is to assign the values to the unknown functions.
思路:若不存在-1,则要判断是否满足函数的对应关系,如果满足输出1,不满足输出0. 若存在-1 ,个数为 ans 分析得结果为 (n!)^(ans-1)。
代码
#include<iostream>#include<cstdio>#define ll __int64#define mod 1000000007using namespace std;ll ff[105];int main(){ ff[1]=1; for(int i=2;i<=101;i++) ff[i]=ff[i-1]*i%mod;// 计算n! int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int f[105][105]; int ans=0;ll res=1; for(int i=1;i<=m;i++) { scanf("%d",&f[i][1]); if(f[i][1]==-1) ans++; else{ for(int j=2;j<=n;j++) { scanf("%d",&f[i][j]); for (int k = j - 1; k; k--) if (f[i][j] == f[i][k]) res = 0; //判断有没有函数对应关系是否为一一对应,不是则结果为0 } } } // 没有-1时,判断i(1≤i≤n),f1(f2(⋯fm(i)))=i是否成立 if(ans==0) { int flag=1; for(int j=1;j<=n;j++) { int a=f[m][j]; for(int i=m-1;i>=1;i--) a=f[i][a]; if(a!=j)flag=0; if(!flag) break; } if(!flag) {printf("0\n");continue;} if(flag) {printf("1\n") ;continue;} } else{ for(int i=1;i<=ans-1;i++) res=(res*ff[n])%mod; } printf("%I64d\n",res); } return 0;}
- hdu5399 Too simple
- hdu5399 Too Simple
- hdu5399 Too Simple
- hdu5399(2015多校9)--Too Simple
- hdu5399 Too Simple(函数映射)
- hdu5399 Too Simple(推论,分类讨论)
- hdu5399
- hdu5399
- HDU5399
- too young too simple
- too young too simple
- too young too simple
- HDU 5399 Too Simple
- 【HDOJ 5399】Too Simple
- HDU 5399 Too Simple
- HDOJ 5399 Too Simple
- hdu 5399 Too Simple
- Keep it simple but not too simple
- POJ 2079 Triangle(凸包+旋转卡壳求最大三角形面积)
- 2015/8/18/Activity框图/Linear与RelativeLayout布局
- MD5加密(Java)
- STM32F4——串口(USART)通信总结
- 创建带有密码的sqlite 数据库
- hdu5399 Too simple
- NYOJ_96 n-1位数 (输出一个除去最高位的数字)
- IOS学习笔记08-创建图片浏览程序
- html5离线缓存--manifest
- 源代码解读Cas实现单点登出(single sign out)功能实现原理
- 堆排序 - 不稳定的排序
- 织梦 channel 标签 指定typeid时 currentstyle无效的修复办法
- 神奇的table-cell
- Marlin固件之—:基础入门与测试