BZOJ 4555: [Tjoi2016&Heoi2016]求和

好久之前做的题了,算是我的NTT入门题了,然后我点开题单里的多项式,除了这题全TM是权限题当场去世

废话不多说直接推式子:

\[ans=\sum_{i=0}^n\sum_{j=0}^i \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{i=0}^n\sum_{j=0}^n \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{j=0}^n 2^j\times j!\times \sum_{i=0}^n\left\{_j^i\right\}\\=\sum_{j=0}^n 2^j\times j!\times \sum_{i=0}^n\sum_{k=0}^j (-1)^k\times \frac{1}{k!(j-k)!}\times (j-k)^i\\=\sum_{j=0}^n 2^j\times j!\times \sum_{k=0}^j (-1)^k\times \frac{1}{k!(j-k)!}\times \sum_{i=0}^n(j-k)^i\\=\sum_{j=0}^n 2^j\times j!\times \sum_{k=0}^j \frac{(-1)^k}{k!}\times \frac{\sum_{i=0}^n(j-k)^i}{j-k}\\ \]

注意上面的\(\left\{_m^n\right\}=\sum_{i=0}^m (-1)^i\times \frac{1}{i!(m-i)!}\times (m-i)^n\)是第二类斯特林数的通项公式,可以通过组合意义推出

推到这里我们发现式子已经化成了卷积的形式,设\(A(x)=\frac{(-1)^x}{x!},B(x)=\frac{\sum_{i=0}^n x^i}{x!}=\frac{x^{n+1}-1}{(x-1)x!}\),并且\(B(1)=n+1\),然后直接大力NTT就好了,复杂度\(O(n\log n)\)

PS:据说有\(O(n)\)的生成函数的做法但是咱太弱了不会啊QAQ

#include
#include
#define RI register int
const int N=100005,mod=998244353;
int n,ans,pw[N],fact[N],inv[N],A[N<<2],B[N<<2],lim;
inline void inc(int &x,int y)
{
    if ((x+=y)>=mod) x-=mod;
}
inline void dec(int &x,int y)
{
    if ((x-=y)<0) x+=mod;
}
inline int quick_pow(int x,int p,int mul=1)
{
    for (;p;p>>=1,x=1LL*x*x%mod) if (p&1) mul=1LL*mul*x%mod; return mul;
}
class NTT_Solver
{
    private:
        int rev[N<<2],p;
        inline void swap(int &x,int &y)
        {
            int t=x; x=y; y=t;
        }
    public:
        inline void init(int n)
        {
            for (lim=1;lim<=n;lim<<=1,++p);
            for (RI i=0;i>1]>>1)|((i&1)<

你可能感兴趣的:(BZOJ 4555: [Tjoi2016&Heoi2016]求和)