6710. 【2020.06.09省选模拟】题1 permutation

题目


正解

可以发现 g 1 g_1 g1是个长成 2 k 2^k 2k 2 k ∗ 3 2^k*3 2k3的东西,然后后面就像阶梯一样指数和一层一层地下降,最终到 1 1 1

考虑 2 k 2^k 2k的情况(另一个情况枚举 3 3 3被除去是什么时候,其它类似):
从后往前做,设 s i s_i si表示最高能放到的层数不超过第 i i i层的数字有多少个。
假设已经处理完了 i − 1 i-1 i1层,第 i i i层的点中要取出一个放到最前面,然后其它的随意插入后面的序列中。
于是贡献大概是这样: s 0 ! ∏ ( s i − s i − 1 ) ! C s i s i − s i − 1 − 1 s_0!\prod (s_i-s_{i-1})!C_{s_i}^{s_i-s_{i-1}-1} s0!(sisi1)!Csisisi11
这条式子可以化简,最终发现瓶颈在于我们需要快速计算出 ( n − 1 ) ! (n-1)! (n1)!的值。
模数固定,分段即可……

既然有打表,那代码就不放了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值