题目描述
n<=105
题目分析
我们惊喜地发现这竟然是一道数论题。
- 第二类斯特林数定义
S(n,m):
- 首先关于第二类斯特林数有一个特别重要的公式。
-
S(i,j)=j!1∗∑k=1j(−1)k∗Cjk∗(j−k)i
- 这是一个容斥,枚举有多少个集合是空的,但最后因为每一个集合是相同的,所以要除以
j!
- 然后我们把这个东西套进题目的式子里:
-
∑i=0n∑j=0iS(i,j)∗2j∗j!
-
=∑i=0n∑j=0nS(i,j)∗2j∗j!
-
=∑j=0n2j∗j!∗∑i=0nS(i,j)
-
=∑j=0n2j∗j!∗∑i=0nj!1∗∑k=1j(−1)k∗Cjk∗(j−k)i
-
=∑j=0n2j∗j!∗∑i=0nj!1∗∑k=1j(−1)k∗k!(j−k)!j!∗(j−k)i
-
=∑j=0n2j∗j!∗∑i=0n∑k=1j(−1)k∗k!(j−k)!(j−k)i
-
=∑j=0n2j∗j!∗∑k=1j∑i=0n(−1)k∗k!(j−k)!(j−k)i
-
=∑j=0n2j∗j!∗∑k=1jk!(−1)k∑i=0n(j−k)!(j−k)i
- 用等比数列求和,可得:
-
=∑j=0n2j∗j!∗∑k=1jk!(−1)k∗(j−k−1)(j−k)!(j−k)n+1−1
- 经过了一系列转折,我们终于接近终点,我们设:
-
f(i)=i!(−1)i,
g(i)=(i−1)∗i!in+1−1
- 所以原式
=∑j=0n2j∗j!∗∑k=1jf(k)∗g(j−k)
- 我们发现这是一个标准的卷积,所以用NTT求即可。
- 时间复杂度
O(nlog2n)