[XJB出题] [Cayley定理] [LOJ#6216] 雪花项链(snowflakes)

//HeRaNO又开新坑了…
题目传送门(感谢Vijos域功能的大力支持……)
居然在LOJ上出了题……传送门
请原谅SB出题人语言表达能力不足…
Solution 题解
首先, c c c是假的,那两个数都是质数…
如何用最少的绳子将 n n n片雪花连起来,当然是用 n − 1 n-1 n1条绳子连成树辣。
首先,我们从 n n n片雪花中选出 i i i片,方案有 ( n i ) \binom{n}{i} (in)种。
然后,我们把这 i i i片雪花连起来,根据Cayley定理,共 i i − 2 i^{i-2} ii2种方案。
因此,对于选择 i i i片雪花,就有 ( n i ) i i − 2 \binom{n}{i}i^{i-2} (in)ii2种方案。
因为 i i i不是定值,所以答案为 ∑ i = l r ( n i ) i i − 2 \sum\limits_{i=l}^r \binom{n}{i}i^{i-2} i=lr(in)ii2
所以对于 T = 1 T=1 T=1的数据,每次暴力加起来…,对于 T = 1 0 6 T=10^6 T=106的数据,使用前缀和优化。
( a − b )   m o d   p = ( a   m o d   p − b   m o d   p + p )   m o d   p (a-b)\bmod p=(a\bmod p-b\bmod p+p)\bmod p (ab)modp=(amodpbmodp+p)modp
对于求组合数的过程, O ( n ) O(n) O(n)处理逆元, O ( 1 ) O(1) O(1)计算。
对于求 i i − 2 i^{i-2} ii2的过程,上快速幂…
因此,整个算法时间复杂度为 O ( n + log ⁡ 2 n ! + T ) O(n+\log_2n!+T) O(n+log2n!+T)
log ⁡ 2 n ! = ∑ i = 1 n log ⁡ 2 i \log_2n!=\sum\limits_{i=1}^n\log_2i log2n!=i=1nlog2i
n = 1 0 6 n=10^6 n=106时,一定有 ∑ i = 1 n log ⁡ 2 i < n log ⁡ 2 1 0 6 < 2 × 1 0 7 \sum\limits_{i=1}^n\log_2i<n\log_210^6<2\times 10^7 i=1nlog2i<nlog2106<2×107
得出 log ⁡ 2 n ! < 2 × 1 0 7 \log_2n! < 2\times 10^7 log2n!<2×107,所以时间复杂度可以保证。虽然复杂度是 1 0 7 10^7 107级别,~~但是鉴于LOJ测评机的速度,~~是可以在 1 1 1s内完成的。(虽然开了 1.5 1.5 1.5s……)

Source 来源

五三数学选修2-3 P17第15题…
(数学课上闲的没事瞎想…)

Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值