文章目录

  • 目录
    • 题意:
    • 思路:

目录

题意:

给你一个nnn的排列,排列中的数代表他的高度,问你有多少个排列能使得从左边能看到aaa个建筑,从右边能看到bbb个建筑。

如果建筑iii左边没有任何比他高的,那么他就能看到。

1≤n≤50000,1≤a,b≤100,1≤t≤200001\le n\le 50000,1\le a,b\le 100,1\le t\le 200001≤n≤50000,1≤a,b≤100,1≤t≤20000

思路:

考虑以高度为nnn的位置为分割点,这样就分成了左右两部分,考虑左边有若干个高度为x1,x2,x3,...x_1,x_2,x_3,...x1​,x2​,x3​,...,考虑最终合法的排列左边的形状大概就是a1>a2>a3,a4>a5>a6,...a_1>a_2>a_3,a_4>a_5>a_6,...a1​>a2​>a3​,a4​>a5​>a6​,...这样的形式,那么我们可以将a1>a2>a3a_1>a_2>a_3a1​>a2​>a3​看成一个部分,那么左边需要有a−1a-1a−1个这样的部分,也就是说我们需要将其分成a−1a-1a−1个部分,右边同理,那么总体就是将n−1n-1n−1个数分成a+b−2a+b-2a+b−2个部分,假设每部分的个数为xix_ixi​,那么还需要乘上(xi−1)!(x_i-1)!(xi​−1)!,所以这是一个第一类斯特林数,因为每个部分内部是一个圆排列的排列数。

算出来之后,再乘上(a+b−2a−1)\binom{a+b-2}{a-1}(a−1a+b−2​)即可。

//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=310,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int c[N][N];
int f[50010][300];int main()
{f[0][0]=1;for(int i=1;i<50010;i++) {for(int j=1;j<300;j++) {f[i][j]=(f[i-1][j-1]+1ll*(i-1)*f[i-1][j])%mod;}}for(int i=0;i<N;i++) {for(int j=0;j<=i;j++) {if(!j) c[i][j]=1;else c[i][j]=(1ll*c[i-1][j-1]+c[i-1][j])%mod;}}int _; scanf("%d",&_);while(_--) {int n,a,b;scanf("%d%d%d",&n,&a,&b);printf("%lld\n",1ll*f[n-1][a+b-2]*c[a+b-2][a-1]%mod);}return 0;
}
/**/

建筑师 第一类斯特林数相关推荐

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

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

  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. 【BJOI2019】勘破神机(下降幂转自然幂)(第一类斯特林数)(特征方程)

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

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

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

  9. 第一类Stirling数(第一类斯特林数)

    第一类Stirling数(第一类斯特林数) 定义 第一类Stirling数表示把nnn个不同元素构成mmm个圆的排列方案数,写作s(n,m)s(n,m)s(n,m). 根据正负性分为无符号第一类Sti ...

最新文章

  1. 2022-2028年中国碲化镉薄膜太阳能电池行业发展现状分析及投资前景趋势报告
  2. C#中HashTable的用法
  3. 基于数据挖掘的旅游推荐APP(二):主界面布局
  4. 160个Crackme037
  5. CSS中让一个div的高度随着另外个一个统计的div的高度变化而变化的代码
  6. layui前端页面table表格怎么格式化转换时间_个人经历:我的前端学习历程
  7. python成语接龙代码_#python# 成语接龙(二)
  8. Using mysqldump for Backups(备份还原数据库实例及参数详细说明)
  9. 黑苹果OC引导配置制作小工具:一键制作黑苹果OpenCore EFI文件
  10. 应用程序平台应用之星:在线手机应用开发平台 不用搭建环境
  11. makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解
  12. xmlspy2014 安装与破解
  13. 什么时候你想逃离北上广?
  14. android 方向传感器,10.11 传感器专题(2)——方向传感器
  15. 视觉SLAM十四讲slambook2/ch3/examples/plotTrajectory.cpp程序报错解决
  16. win32 opengl画线
  17. Lost in Island
  18. 电商b2b_企业对企业– B2B | 第2部分
  19. 湖南大学计算机专业保研,湖南大学各专业保研率
  20. python 时间函数

热门文章

  1. mysql 多数据库事务_多数据库事务处理
  2. 世界上最奇异的10种树,你都见过吗?
  3. 见识过世界的强大,才能拥有掌握世界的力量
  4. Facebook 竟然把服务 27 亿人的 AI 硬件系统开源了?!
  5. oracle执行命令显示2,Oracle数据库执行脚本常用命令小结
  6. java序列化有什么用_java中序列化的作用
  7. 下面选项能正确表示JAVA_模拟试题2
  8. 缓存机制 java_缓存机制:java中缓存的原理
  9. linux中的ip地址范围,linux – ip地址范围参数
  10. 紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代