那么我们可以写出函数过程:
f
(
x
)
:
if ans < 1
return 1
else
return
[
(
n
2
)
!
]
3
×
C
n
(
n
2
)
\large f(x):\\ \operatorname{if\ ans\ <\ 1}\\ \operatorname{\ \ \ \ \ return\ 1}\\ \operatorname{\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!else}\\ \operatorname{\ \ \ return\ }\small[{(\dfrac{n}{2})!}]^3\times C_n^{(\frac{n}{2})}
f(x):if ans < 1 return 1else return [(2n)!]3×Cn(2n)
一共
log
2
x
\log_2\!\!x
log2x层,复杂度
O
(
k
l
o
g
2
n
)
O(klog_2\!n)
O(klog2n)
k
k
k代表计算组合的复杂度。
组合如何求?
简(fǔ)朴(zá)算法
用公式:
C
a
b
=
n
!
×
(
n
−
1
)
!
×
⋯
×
(
n
−
m
+
1
)
!
m
!
,
复杂度
O
(
n
2
)
C_a^b=\dfrac{n!\times (n-1)! \times \cdots \times (n-m+1)!}{m!},\texttt{复杂度}O(n^2)
Cab=m!n!×(n−1)!×⋯×(n−m+1)!,复杂度O(n2)
阶乘可用前向推导,优化后为
O
(
n
)
O(n)
O(n)
数学优化
用公式 C n m = C n n − m C_n^m=C_{n}^{n-m} Cnm=Cnn−m来保证 m ≥ n 2 m\ge\dfrac{n}{2} m≥2n
数学算法
公式: C n m = n ! m ! ( n − m ) ! , 复杂度 O ( n ) C_n^m=\dfrac{n!}{m!(n-m)!},\texttt{复杂度}O(n) Cnm=m!(n−m)!n!,复杂度O(n)
预处理
O ( 1 ) O(1) O(1)
总结
最后,复杂度为对数级别的了,记得开高精!