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

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


给出T 组数据 (T <= 500000)  对于每一组数据输出可能的个数,为避免写高精,将答案模 1e9 + 7 (它为质数,但似乎没蛋用)


 关于 O(TnLR) 或 O(nMAX(L,R)) 预处理,O (n) 查询的解法已有,现在我来安利安利汪神的无敌解法,我现在只服汪神!!!

先说答案,答案为s(n-1,l+r-2) * C(l + r - 2,l - 1) (s为第一类斯特林数,c为组合数)

证明

图中画出的柱子是能被看出的,每根柱子后面一定有比它小的柱子,但这些柱子随便怎么排都无所谓,所以对于一根柱子来说,设它和它背后比它低的柱子个数为k。

那么比它低的柱子有k-1个,排列方式为(k-1)!

设能被看到的柱子和后面比它低的柱子为一个集合,那么全场共有(l + r - 2) 个集合(忽略最高的柱子)。只要我们找出了这(l + r - 2)个集合,那么就一定能构成上图(每个集合最高的柱子作为这个集合的代表)

那么我们找出这(l+r-2)个不同的集合的方案数为s(n-1,l+r-2)。为什么是这样呢?

显然,对于一个集合而言,如果其他l+r-3个集合不变,那么他就一定会变,因为是找圆排列,它只会变(k-1)! 次(k为此集合大小)。。。

刚好这个集合除了代表元素也只有(k-1)!种排列,所以是正确的。。。(我不知道之前的算不算口胡,汪神说只可意会,是非完美证明)

我们在选出的(l+r-2)个中选出l-1个作为左边的就好了 因此就乘上组合数

转载于:https://www.cnblogs.com/dcoi-king/p/5353658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值