题目链接

洛谷P4609

题解

感性理解一下:

一神带\(n\)坑

所以我们只需将除了\(n\)外的\(n - 1\)个元素分成\(A + B - 2\)个集合,每个集合选出最大的在一端,剩余进行排列,然后选出\(A - 1\)个集合放左边,剩余放右边

容易发现分割集合并内部排列实质对应第一类斯特林数\[\begin{bmatrix} n - 1 \\ A + B - 2 \end{bmatrix}\]
所以答案就是
\[\begin{bmatrix} n - 1 \\ A + B - 2 \end{bmatrix} {A + B - 2 \choose A - 1}\]
\(O(n(A + B) + (A + B))\)预处理第一类斯特林数和组合数即可
递推式
\[\begin{bmatrix} n \\ m \end{bmatrix} = \begin{bmatrix} n - 1 \\ m - 1 \end{bmatrix} + \begin{bmatrix} n - 1 \\ m \end{bmatrix}(n - 1)\]

真不知道这题是怎么打到深蓝的

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 50005,maxm = 205,INF = 1000000000,P = 1000000007;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int s[maxn][maxm],N = 50000,M = 200;
int fac[maxm],fv[maxm];
inline int qpow(int a,int b){int re = 1;for (; b; b >>= 1,a = 1ll * a * a % P)if (b & 1) re = 1ll * re * a % P;return re;
}
void init(){fac[0] = 1;for (int i = 1; i < maxm; i++) fac[i] = 1ll * fac[i - 1] * i % P;fv[maxm - 1] = qpow(fac[maxm - 1],P - 2); fv[0] = 1;for (int i = maxm - 2; i; i--) fv[i] = 1ll * fv[i + 1] * (i + 1) % P;s[0][0] = 1;for (int i = 1; i <= N; i++){int E = min(i,M);for (int j = 1; j <= E; j++)s[i][j] = (s[i - 1][j - 1] + 1ll * s[i - 1][j] * (i - 1) % P) % P;}
}
inline int C(int n,int m){return 1ll * fac[n] * fv[m] % P * fv[n - m] % P;
}
int main(){init();int T = read(),n,A,B;while (T--){n = read(); A = read(); B = read();printf("%lld\n",1ll * s[n - 1][A + B - 2] * C(A + B - 2,A - 1) % P);}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9188858.html

洛谷P4609 [FJOI2016]建筑师 【第一类斯特林数】相关推荐

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

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

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

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

  3. 第一类斯特林数学习记录

    最近做题有时会碰到斯特林数(Stirling数),就觉得好好的学习一番,于是呢,写下这篇博客,来记录一些知识 简单介绍 第一类斯特林数表示表示将 n 个不同元素构成m个圆排列的数目.--百度百科 第一 ...

  4. [HDU 3625] Examining the Rooms(第一类斯特林数)

    Examining the Rooms problem solution code problem hdu 3625 solution 之前考试有一道题:最多砸开 kkk 扇门,采取最有操作,求把 n ...

  5. CF960G-Bandit Blues【第一类斯特林数,分治,NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/CF960G 题目大意 求有多少个长度为nnn的排列,使得有AAA个前缀最大值和BBB个后缀最大值. 0≤n,A,B≤ ...

  6. [数学最安逸][UVa1638改编][第一类斯特林数+组合数]杆子的排列

    有高为1,2,3,...,n的杆子各一根排成一行.从左边能看到l根,从右边能看到r根,求有多少种可能. (l,r <= 200,n <= 200000) 给出T 组数据 (T <= ...

  7. 信息学奥赛一本通 1919:【02NOIP普及组】选数 | 洛谷 P1036 [NOIP2002 普及组] 选数

    [题目链接] ybt 1919:[02NOIP普及组]选数 洛谷 P1036 [NOIP2002 普及组] 选数 [题目考点] 1.排列组合 2.深搜(子集树) 3.质数 [解题思路] 深搜(子集树) ...

  8. 【BJOI2019】勘破神机(下降幂转自然幂)(第一类斯特林数)(特征方程)

    传送门 题解: 完全自己推出来的第一道数学神题. 首先我们知道宽度为222的部分方案数是斐波那契数列. 设fnf_nfn​表示长度为nnn的时候方案数,题目要求的实际上是这个东西: ∑n=lr(fnk ...

  9. zoj3344 第一类斯特林数+java大数

    题意:有个游戏,两个人玩.有n个卡片,洗牌后放入编号为1到n的盒子里,然后两个人轮流做如下操作,拿出盒子中编号最小的卡片k,然后再去编号为k的盒子中拿出卡片,依次类推,直到没有卡片可拿为止.拿走最后一 ...

最新文章

  1. centos7 更新源 安装ifconfig
  2. 2021年SDN和NFV的支出将超1580亿美元!
  3. python获取url文件名_python httplib / urllib获取文件名
  4. JVM 面试题 87 题详解
  5. 【整理】ABAP开发中的屏幕跳转
  6. RabbitMQ快速入门--消息模型介绍
  7. FastJson的使用方法总结
  8. 102.二叉树的层序遍历
  9. android ui设计最新字体,UI设计常用字体规范
  10. 经过几天的努力,出了 2 本保姆级编程电子书!
  11. 2015-5-10分享pdf
  12. python人脸识别门禁系统毕设_基于人脸识别的门禁系统设计与实现
  13. myeclipse破解补丁
  14. k8s nginx ingress 显示证书错误
  15. diskpart命令_Windows Diskpart命令教程
  16. 实现HTML的简单压缩
  17. TCP长连接和短连接代码及其比较
  18. 大数据 别让技术蛊惑
  19. 基于微博的舆情监控系统 JAVA SSM MySQL
  20. od机考真题-求n阶方阵里的所有数的和

热门文章

  1. Linux中配置bochs
  2. iText in Action 2nd4.2节(Changing the properties of a cell)读书笔记
  3. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
  4. ubuntu系统写路由指令_ubuntu/linux下设置永久路由
  5. opencv图像恢复逆滤波_OpenCV之快速的图像边缘滤波算法
  6. python列表输入不加逗号_用python打印不带括号或逗号的列表
  7. python制作二级菜单_python实现二级登陆菜单及安装过程
  8. C++中的Lock简单用法
  9. MySQL 表中添加 时间戳 字段
  10. Mybatis映射文件(3)