//HeRaNO又开新坑了…
题目传送门(感谢Vijos域功能的大力支持……)
居然在LOJ上出了题……传送门
请原谅SB出题人语言表达能力不足…
Solution 题解
首先,
c
c
c是假的,那两个数都是质数…
如何用最少的绳子将
n
n
n片雪花连起来,当然是用
n
−
1
n-1
n−1条绳子连成树辣。
首先,我们从
n
n
n片雪花中选出
i
i
i片,方案有
(
n
i
)
\binom{n}{i}
(in)种。
然后,我们把这
i
i
i片雪花连起来,根据Cayley定理,共
i
i
−
2
i^{i-2}
ii−2种方案。
因此,对于选择
i
i
i片雪花,就有
(
n
i
)
i
i
−
2
\binom{n}{i}i^{i-2}
(in)ii−2种方案。
因为
i
i
i不是定值,所以答案为
∑
i
=
l
r
(
n
i
)
i
i
−
2
\sum\limits_{i=l}^r \binom{n}{i}i^{i-2}
i=l∑r(in)ii−2。
所以对于
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
(a−b)modp=(amodp−bmodp+p)modp…
对于求组合数的过程,
O
(
n
)
O(n)
O(n)处理逆元,
O
(
1
)
O(1)
O(1)计算。
对于求
i
i
−
2
i^{i-2}
ii−2的过程,上快速幂…
因此,整个算法时间复杂度为
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=1∑nlog2i
当
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=1∑nlog2i<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题…
(数学课上闲的没事瞎想…)