题意:有m个1~n的映射,而且对于任意的 i 满足 f1(f2(...fm(i))) = i

其中有些映射是知道的,有些是不知道的,问一共有多少种置换的组合。

分析:

首先这些置换一定是1~n的一个置换(也就是1~n的一个排列)才行,因为如果某两个数映射到同一个数的话,那么这个数往后无论怎么映射,这两个数最终映射的结果还是一样的。

如果所有的f都给出来的话,那么只要判断一下就行。

如果有一个置换不知道的话,这个置换是可以通过前后的置换计算出来的,所以只有唯一解。

如果有两个置换不知道的话,第一个置换可以任意确定,有n!种情况,第二个置换根据第一个置换确定。

以此类推,有c个未知的置换的话,其中c-1个可以自由确定,而且互补影响,最后一个置换根据前面所有置换唯一确定,所以中的方案数是(n!)c-1

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. typedef long long LL;
  7.  
  8. const int maxn = + ;
  9. const LL MOD = ;
  10.  
  11. int n, m;
  12. bool vis[maxn];
  13. int a[maxn][maxn];
  14.  
  15. inline LL mul_mod(LL a, LL b) { return a * b % MOD; }
  16.  
  17. LL pow_mod(LL a, int n)
  18. {
  19. LL ans = 1LL, base = a;
  20. while(n)
  21. {
  22. if(n & ) ans = mul_mod(ans, base);
  23. base = mul_mod(base, base);
  24. n >>= ;
  25. }
  26. return ans;
  27. }
  28.  
  29. LL fac[maxn];
  30.  
  31. int main()
  32. {
  33. fac[] = ;
  34. for(int i = ; i < maxn; i++) fac[i] = fac[i - ] * i % MOD;
  35.  
  36. while(scanf("%d%d", &n, &m) == && n)
  37. {
  38. int cnt = ;
  39. bool ok = true;
  40. for(int i = ; i <= m; i++)
  41. {
  42. scanf("%d", &a[i][]);
  43. if(a[i][] == -) { cnt++; continue; }
  44. for(int j = ; j <= n; j++) scanf("%d", &a[i][j]);
  45. memset(vis, false, sizeof(vis));
  46. for(int j = ; j <= n; j++)
  47. {
  48. if(vis[a[i][j]]) { ok = false; break; }
  49. vis[a[i][j]] = true;
  50. }
  51. }
  52. if(!ok) { puts(""); continue; }
  53.  
  54. if(!cnt)
  55. {
  56. bool ok = true;
  57. for(int i = ; i <= n; i++)
  58. {
  59. int t = i;
  60. for(int j = m; j >= ; j--) t = a[j][t];
  61. if(t != i) { ok = false; break; }
  62. }
  63. if(ok) puts(""); else puts("");
  64. }
  65. else printf("%I64d\n", pow_mod(fac[n], cnt - ));
  66. }
  67.  
  68. return ;
  69. }

代码君

HDU 5399 数学 Too Simple的更多相关文章

  1. 【HDU 5399】Too Simple

    题 Description Rhason Cheung had a simple problem, and asked Teacher Mai for help. But Teacher Mai th ...

  2. HDU 5984 数学期望

    对长为L的棒子随机取一点分割两部分,抛弃左边一部分,重复过程,直到长度小于d,问操作次数的期望. 区域赛的题,比较基础的概率论,我记得教材上有道很像的题,对1/len积分,$ln(L)-ln(d)+1 ...

  3. 【HDOJ 5399】Too Simple

    pid=5399">[HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的 ...

  4. HDU 5399 Too Simple(过程中略微用了一下dfs)——多校练习9

    Too Simple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  5. HDU 5399 Too Simple (2015年多校比赛第9场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题分情况讨论.比赛时候真是想的太简单了.以为就是(n!)^(cnt-1). 终于无限WA. 本题有几个特殊情况须要额外推断. 首先,假设输入的时候.有某 ...

  6. *HDU 2451 数学

    Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  7. HDU 5795:A Simple Nim(博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Problem Description   Two players take t ...

  8. hdu 5349 MZL's simple problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5349 MZL's simple problem Description A simple proble ...

  9. hdu 1851(A Simple Game)(sg博弈)

    A Simple Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Tot ...

随机推荐

  1. spring cloud 测试的时候报 BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration' 但能正确跑完测试方法

    因为都能正确的跑测试方法,所以我也不太注意它,但是有时候闲得蛋疼就会找一下原因. 具体原因我也说不清,直接丢个连接 https://github.com/spring-cloud/spring-clo ...

  2. 【0 基础学Dojo】第【1】篇 HelloWord

    打开dojo 官网首页 http://dojotoolkit.org/,我们看到 点击get dojo  你将得到下载Dojo 的不同方式 2,点击下面方式下载, 解压后 新建myTest.html, ...

  3. Oracle中文乱码,字符集问题处理

    1. 右键计算机,选择属性,增加环境变量 NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.进入注册表,依次单击HKEY_LOCAL_MACHINE --> ...

  4. CF1142A The Beatles

    思路: 令p表示步数,l表示步长.由于p是使(l * p) % (n * k) == 0的最小的p,所以p = (n * k) / gcd(n * k, l). 设l = k * x + r,则由题意 ...

  5. Appium基础四:Desired Capabilities详讲

    Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...

  6. ftp和sftp

    一.ftp ftp是文件传输协议,ftp协议包括两部分,一个是ftp客户端,另一个是ftp服务器. 原理:一般情况下,当使用FTP服务的时候,我们都知道默认是21号端口,其实还有一个20号端口.FTP ...

  7. SAP GUI里Screen Painter的工作原理

    我们在SAP GUI里双击一个screen编号: 单击Layout按钮可以打开Screen Painter: 这背后的工作原理是什么? 是这个RFC destination在起作用: Connecti ...

  8. Uva 127 poj 1214 `Accordian'' Patience 纸牌游戏 模拟

    Input Input data to the program specifies the order in which cards are dealt from the pack. The inpu ...

  9. Android(java)学习笔记137:ListView编写步骤(重点)

    1.ListView在我们的手机android编写程序中使用是十分广泛的,比如如下图中 短信 和 手机设置 都是ListView的效果: 手机设置:             短信:    2.正因为这 ...

  10. Vue-Quill-Editor 修改配置,和图片上传

    1.富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改配置. 创建一个quill-config文件 /*富文本编辑图片上传配置*/ /*富文本编辑图片上传 ...