第一篇博客,请大家多多关照。(鞠躬
BZOJ4555 TJOI2016 HEOI2016 求和
题意:
给定一个正整数(n)((1leqq n leqq100000)),求:
[egin{align*}
f(n)=sum_{i=0}^nsum_{j=0}^i egin{Bmatrix}i\jend{Bmatrix} imes2^j imes(j!)
end{align*}
]
题解:
第二类斯特林数公式题,题目中很良心地给了我们第二类斯特林数的递推公式:
[egin{align*}
egin{Bmatrix}i\jend{Bmatrix}=j imes egin{Bmatrix}i-1\jend{Bmatrix}+egin{Bmatrix}i-1\j-1end{Bmatrix}
end{align*},1leqq jleqq i-1\
egin{Bmatrix}i\iend{Bmatrix}=[igeqq0]
]
于是我们愉快地用上面的公式,于是我们愉快地T掉。
所以,我们应该考虑有没有一种能让我们在(O(logn))内求出我们需要的每一项第二类斯特林数的方法。
有,我们可以用容斥定理求出斯特林数的通项公式(我并不会,是背的):
[egin{align*}
egin{Bmatrix}n\mend{Bmatrix}&=frac{1}{m!}sum_{k=0}^mdbinom{m}{k}(m-k)^n(-1)^k\
&=frac{1}{m!}sum_{k=0}^mfrac{m!}{k!(m-k)!}(m-k)^n(-1)^k\
&=sum_{k=0}^mfrac{1}{k!}frac{(m-k)^n}{(m-k)!}(-1)^k
end{align*}
]
带入原式中:
[egin{align*}
f(n)&=sum_{i=0}^nsum_{j=0}^i egin{Bmatrix}i\jend{Bmatrix} imes2^j imes(j!)\
ecause当j>i时,egin{Bmatrix}i\jend{Bmatrix}=0\&=sum_{j=0}^n2^j imes(j!)sum_{i=0}^nsum_{k=0}^jfrac{(-1)^k}{k!}frac{(j-k)^i}{(j-k)!}\
&=sum_{j=0}^n2^j imes(j!)sum_{k=0}^jfrac{(-1)^k}{k!}sum_{i=0}^nfrac{(j-k)^i}{(j-k)!}
end{align*}
]
出现了卷积形式,记(A(x)=sum_{k=0}^xfrac{1}{k!}),(B(x)=sum_{i=0}^nfrac{x^i}{x!})
预处理(2^j)、(j!),用ntt处理(sum_{j=0}^nsum_{i+k=j}A(i) imes B(k))
时间复杂度:(O(nlogn))