【FJOI2016】建筑师

问题描述

小 Z 是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建 n 个建筑,每个建筑的高度是 1 到 n 之间的一个整数。

小 Z 有很严重的强迫症,他不喜欢有两个建筑的高度相同。另外小 Z 觉得如果从最左边(所有建筑都在右边)看能看到 A个建筑,从最右边(所有建筑都在左边)看能看到 B 个建筑,这样的建筑群有着独特的美感。现在,小 Z 想知道满足上述所有条件的建筑方案有多少种?

如果建筑 i 的左(右)边没有任何建造比它高,则建筑 i 可以从左(右)边看到。两种方案不同,当且仅当存在某个建筑在两种方案下的高度不同。

输入格式

第一行一个整数 T,代表 T 组数据。
接下来 T 行,每行三个整数 n,A,B

输出格式

对于每组数据输出一行答案 mod10^9+7。

样例输入 1

2
3 2 2
3 1 2

样例输出 1

2
1

样例输入 2

5
1 1 1
2 1 1
4 3 1
10 2 2
8 6 4

样例输出 2

1
0
3
219168
0

提示

对于 10% 的数据 : 1≤n≤10
对于 20% 的数据 : 1≤n≤100
对于 40% 的数据 : 1≤n≤50000, 1≤T≤5
对于 100%的数据 :1≤n≤50000, 1≤A,B≤100, 1≤T≤200000


显然最高的那个一定看得见放在哪里都一样,我们不管它。

然后考虑最高的杆子左边的部分(右边同理)

每 两个看得见的杆子之间都可能会有被挡住的杆子,我们把一个看得见的杆子和它挡住的杆子看成一个集合,假设这个集合大小为C,那么在确定集合元素的情况下, 这个集合的排列的方案数实际上就是C个元素圆排列的方案数。因为一个圆排列都对应且仅对应一个合法排列(因为最高的杆子肯定在最左边所以肯定是从最高的杆 子这里断开),所以问题就变成了把n-1个杆子分成a+b-2个圆排列的方案数(因为最高的杆子左边有a-1个这样的集合,右边有b-1个),就 是$S(n-1,a+b-2)$。当然对于每种分法我们要确定这个圆排列是在左边还是在右边,所以要乘上$C(a+b-2,a-1)$。

答案就是$S(n-1,a+b-2)*C(a+b-2,a-1)$,预处理一下$O(1)$回答就好了。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=l; i<=r; i++)
 4 using namespace std;  5  6 const int MOD=1000000007,M=210,N=50010;  7 int s[N][M],C[M][M],T,n,a,b;  8  9 void init(int n,int a) { 10 rep(i,0,n){ 11 s[i][0]=0; 12 if(i<=a) s[i][i]=1; 13 rep(j,1,min(i,a)) s[i][j]=(0ll+s[i-1][j-1]+1ll*(i-1)*s[i-1][j]%MOD)%MOD; 14  } 15 rep(i,0,a){ 16 C[i][0]=1; 17 rep(j,1,i) C[i][j]=(0ll+C[i-1][j]+C[i-1][j-1])%MOD; 18  } 19 } 20 21 int main() { 22 init(50000,200); 23 for (scanf("%d",&T); T--; ) 24 scanf("%d%d%d",&n,&a,&b),printf("%lld\n",(1ll*s[n-1][a+b-2]*C[a+b-2][a-1])%MOD); 25 return 0; 26 } 

转载于:https://www.cnblogs.com/HocRiser/p/8566080.html

[FJOI2016]建筑师(斯特林数)相关推荐

  1. 洛谷P4609 [FJOI2016]建筑师 【第一类斯特林数】

    题目链接 洛谷P4609 题解 感性理解一下: 一神带\(n\)坑 所以我们只需将除了\(n\)外的\(n - 1\)个元素分成\(A + B - 2\)个集合,每个集合选出最大的在一端,剩余进行排列 ...

  2. 建筑师 第一类斯特林数

    文章目录 目录 题意: 思路: 目录 题意: 给你一个nnn的排列,排列中的数代表他的高度,问你有多少个排列能使得从左边能看到aaa个建筑,从右边能看到bbb个建筑. 如果建筑iii左边没有任何比他高 ...

  3. 《小学生都能看懂的三类斯特林数从入门到升天教程 》(含性质完整证明、斯特林反演、拉赫数)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 真的特别简单,我尽量讲的详细一些,本文包含了几乎所有性质定理证明,老少皆宜 ~ 内容过多,质量过硬,建 ...

  4. 第一类和第二类斯特林数

    第一类斯特林数 第一类斯特林数定义如下: \(s_1(n,k)\)表示\(n\)个元素组成\(k\)个圆排列的方案数. 其中\(n\)个元素的圆排列定义为\(n\)个元素围成一圈的排列,两个圆排列本质 ...

  5. 快速求斯特林数总结(洛谷模板题解)

    题目链接 第一类斯特林数·行 第一类斯特林数·列 第二类斯特林数·行 第二类斯特林数·列 求一行第一类斯特林数 由第一类斯特林数的推论,\(x^{\overline{n}}=\sum_i\begin{ ...

  6. 【2019雅礼集训】【CF 960G】【第一类斯特林数】【NTT多项式】permutation

    目录 题意 输入格式 输出格式 思路 代码 题意 找有多少个长度为n的排列,使得从左往右数,有a个元素比之前的所有数字都大,从右往左数,有b个元素比之后的所有数字都大. n<=2*10^5,a, ...

  7. BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...

  8. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0 用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O( ...

  9. 【组合数学】第一类,第二类斯特林数(Stirling),Bell数

    第一类斯特林数 定理: 第一类斯特林数S1(p,k)计数的是把p个对象排成k个非空循环排列的方法数. 证明:把上述定理叙述中的循环排列叫做圆圈 递推公式: S1(p,p)=1(p>=0),有p个 ...

最新文章

  1. linux磁盘管理原理,Linux操作系统中磁盘存储区管理的原理与技巧
  2. ansible高级应用示例
  3. android 接口定义常量,Android开发笔记(5):常量的合理使用
  4. 给 EF Core 查询增加 With NoLock
  5. Java中的list、set、map区别
  6. 从计算机基础知识到机器学习第1堂课,最适合新手的5场直播来了
  7. 【Docker】Docker java shell ssh
  8. 小学教师计算机应用培训通讯稿,暑期培训通讯稿
  9. zookeeper的acl权限控制_zookeeper权限acl与四字命令
  10. fatal: 无法访问 ‘x.git/‘gnutls_handshake() failed: The TLS connection was non-properly terminated.解决办法
  11. python关闭函数解释器_深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!...
  12. 小米 admob广告 ID_3月产品更新如何做好再营销广告归因!
  13. JSON和API接口初识
  14. html网页的说课稿,【必备】说课稿模板集锦六篇
  15. 一篇文章搞懂 Hadoop RPC 到底是什么
  16. KANZI入门第一篇之kanzi详解,教你轻松学kanzi
  17. 《SAP HANA平台应用开发》—第2章2.1节熟悉HANA开发环境
  18. 虚拟机Ubuntu18.04开机后没有网络的解决办法
  19. 2021安居育才中学高考成绩查询,育才中学2017高考成绩
  20. python打印一整年的日历

热门文章

  1. php伪造页面url地址,php 伪造HTTP_REFERER页面URL来源的三种方法
  2. 删除文件夹下所有的文件_Mac 删除文件/文件夹方法和快捷键
  3. abs 不会整数 方法 溢出_在 Golang 中针对 int64 类型优化 abs()
  4. c语言中void delay0.5(),单片机彩灯是怎样点亮
  5. php mysql返回条数据,php – MySQL两次返回数据
  6. mysql5.7gtid_MySQL5.7 GTID 运维实战
  7. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...
  8. 关于修改session的生存时间以及回收机制
  9. android studio 显示view树_Android 沉浸式解析和轮子使用
  10. C语言求m中n个数字的组合