2019.10.02模拟赛T3 最优解

题目大意:

  设$S(n,m)$为第二类斯特林数,$F_i$表示斐波那契数列第$i$项。

  给定$n,R,K$,求$$\large\sum\limits_{i=1}^{n}\left(\sum\limits_{m=1}^{R}F_m\right)!i!\sum\limits_{l=0}^{i}\sum\limits_{j=0}^{\sum\limits_{t=1}^{R}F_t}\frac{S(k,i-l)}{l!}\frac{S(i,\sum\limits_{w=1}^{R}F_w-j)}{j!}\mod 1000000007$$  值,其中$n,R\leq10^{18}$,$k\leq2*10^5$

题解:

  首先,这道题需要用到$3$个前置知识:

    1. $$\large\sum\limits_{i=1}^{n}F_i=F_{n+2}-1$$

    使用数学归纳法即可证明。

    2. $$\large m^n=\sum\limits_{i=1}^{m}S(n,i)\binom{m}{i}i!$$

    考虑把$n$个不同的球放入$m$个不同的盒子里且允许有空盒的方案数。

    显然,每个球都有$m$种选择方法,答案是$m^n$。

    另一方面,考虑$n$个球恰好占用了$i$个盒子的方案数,不难得出刚好是$S(n,i)\binom{m}{i}i!$,再对$i$求和即为右式。

    3. 拉格朗日插值:给定平面上$n+1$个点$(x_0,y_0),(x_1,y_1),\cdots,(x_n,y_n)$,其中$x_i$两两不等,

    则存在唯一一个次数不超过$n$的多项式经过这些点,且这个多项式刚好是:$$\large f(x)=\sum\limits_{i=0}^ny_i\prod\limits_{j\ne i}\frac{x-x_j}{x_i-x_j}$$

    显然$f(x)$满足条件:次数不超过$n$且$f(x_i)=y_i$。唯一性:假设这个多项式为$a_0+a_1x+\cdots+a_nx^n$,

    则可以根据点值列出关于$a_i$的线性方程组,其系数行列式刚好为范德蒙德行列式,根据$x_i$不等的条件可得

    系数行列式非零,从而方程组的解存在且唯一,因此上述构造的$f(x)$就是唯一的。

 

================================分割线================================

  回到原题,设$u=\sum\limits_{m=1}^{R}F_i=F_{R+2}-1$,其可以通过矩阵快速幂在$\Theta(\log R)$时间求出,则有:

$$\large ANS=\sum\limits_{i=1}^{n}u!i!\sum\limits_{l=0}^{i}\sum\limits_{j=0}^u\frac{S(k,i-l)}{l!}\frac{S(i,u-j)}{j!}$$

$$\large =\sum\limits_{i=1}^n\sum\limits_{j=0}^uS(i,u-j)\frac{u!}{j!}\sum\limits_{l=0}^iS(k,i-l)\frac{i!}{l!}$$

$$\large =\sum\limits_{i=1}^n\sum\limits_{j=0}^uS(i,j)\frac{u!}{(u-j)!}\sum\limits_{l=0}^iS(k,l)\frac{i!}{(i-l)!}$$

$$\large =\sum\limits_{i=1}^n\sum\limits_{j=0}^uS(i,j)\binom{u}{j}j!\sum\limits_{l=0}^iS(k,l)\binom{i}{l}l!$$

$$\large =\sum\limits_{i=1}^nu^ii^k$$

$u=1$的情况

  此时答案变为$\sum\limits_{i=1}^ni^k$,这是一个经典的拉格朗日插值问题,可以证明该式可表示为关于$n$的$k+1$次多项式。

  点击展开证明

    考虑对$k$做第二数学归纳法:当$k=0$时,有$\sum\limits_{i=1}^ni^k=\sum\limits_{i=1}^n1=n$,成立。

    如果该结论对任意的$k<m$成立,那么$k=m$时,注意到:$$\large n^{k+1}=\sum\limits_{i=1}^n\left(i^{k+1}-(i-1)^{k+1}\right)$$

$$\large =\sum\limits_{i=1}^n\left(i^{k+1}-\sum\limits_{j=0}^{k+1}\binom{k+1}{j}i^j(-1)^{k+1-j}\right)$$

$$\large =\sum\limits_{i=1}^n\left((k+1)i^k-\sum\limits_{j=0}^{k-1}\binom{k+1}{j}i^j(-1)^{k+1-j}\right)$$

$$\large =(k+1)\sum\limits_{i=1}^ni^k-\sum\limits_{j=0}^{k-1}(-1)^{k+1-j}\binom{k+1}{j}\sum\limits_{i=1}^ni^j$$

    整理得:$$\large\sum\limits_{i=1}^ni^k=\frac{n^{k+1}}{k+1}+\sum\limits_{j=0}^{k-1}\frac{(-1)^{k+1-j}}{k+1}\binom{k+1}{j}\sum\limits_{i=1}^ni^j$$

    根据归纳假设,等式右侧为$k$个关于$n$的$j+1$次多项式的线性组合,求和后次数不超过$k$,

    因此$\sum\limits_{i=1}^ni^k$可以表示为关于$n$的$k+1$次多项式,得证。

===============================证明结束===============================

  所以只需知道$n$在$k+2$个点处的取值,即可通过拉格朗日插值求出答案,这里我们取$0,1,\cdots,k+1$。

  首先预处理出点值$y_m=\sum\limits_{i=1}^mi^k,(m=0,1,\cdots,k+1)$,注意朴素的快速幂加前缀和的时间复杂度为

  $\Theta(k\log k)$,因此需要借助线性筛,筛出数论函数$f(n)=n^k$,此时只需在素数点处使用快速幂求值,

  因此根据素数定理,时间复杂度可以降为$\Theta(\frac{k}{\ln k}\cdot \log k)=\Theta(k)$。

  根据拉格朗日插值:$$ANS=\large \sum\limits_{i=0}^{k+1}y_i\prod_{0\leq j\leq k+1,j\ne i}\frac{n-j}{i-j}=\sum\limits_{i=0}^{k+1}y_i(-1)^{k+1-i}\frac{n^{\underline{i}}(n-k-1)^{\overline{k-i+1}}}{i!(k+1-i)!}$$

  其中记号$x^{\overline{n}}$和$x^{\underline{n}}$表示上升幂和下降幂,其定义如下:$$\large x^{\overline{n}}=\prod\limits_{i=0}^{n-1}(x+i),x^{\underline{n}}=\prod\limits_{i=0}^{n-1}(x-i)$$

  而上述出现的上升幂及下降幂均可在$\Theta(k)$时间内预处理出来,因此最终时间复杂度为$\Theta(k)$。

 

$u\ne 1$的情况

  首先观察一下$k$比较小时这个式子的形式(可以通过等比数列求和、错位相减等技术求得):$$\large \sum\limits_{i=1}^nu^ii^0=\frac{u^{n+1}-u}{u-1}=u^n\cdot\frac{u}{u-1}-\frac{u}{u-1}$$

$$\large \sum\limits_{i=1}^nu^ii^1=u^n\left(\frac{u}{u-1}n-\frac{u}{(u-1)^2}\right)+\frac{u}{(u-1)^2}$$

$$\large \sum\limits_{i=1}^nu^ii^2=u^n\left(\frac{u}{u-1}n^2-\frac{2u}{(u-1)^2}n+\frac{u^2+u}{(u-1)^3}\right)-\frac{u^2+u}{(u-1)^3}$$

  我们发现答案的形式大概是$u^n$乘上一个关于$n$的$k$次多项式,最后再加上一个常数,而这个常数似乎刚好与前面

  那个多项式的常数项相反!因此我们大胆猜想:

  存在一个关于$n$的$k$次多项式$p_k(n)$,使得对任意自然数$n$都有如下关系式成立:$$\large \sum\limits_{i=1}^nu^ii^k=u^np_k(n)-p_k(0)$$

  当然我们也可以严格地证明这个结论。

  点击展开证明

    考虑对$k$使用第二数学归纳法:当$k=0$时,上面已经验证过了,结论成立。

    如果该结论对任意的$k<m$成立,那么$k=m$时,注意到:$$\large (u-1)\sum\limits_{i=1}^nu^ii^k=\sum\limits_{i=1}^nu^{i+1}i^k-\sum\limits_{i=1}^nu^ii^k$$

$$\large =\sum\limits_{i=2}^{n+1}u^{i}(i-1)^k-\sum\limits_{i=1}^nu^ii^k$$

$$\large =u^{n+1}n^k+\sum\limits_{i=1}^nu^i\left((i-1)^k-i^k\right)$$

$$\large =u^{n+1}n^k+\sum\limits_{i=1}^nu^i\left(\sum\limits_{j=0}^k\binom{k}{j}i^j(-1)^{k-j}-i^k\right)$$

$$\large =u^{n+1}n^k+\sum\limits_{i=1}^nu^i\sum\limits_{j=0}^{k-1}\binom{k}{j}i^j(-1)^{k-j}$$

$$\large =u^{n+1}n^k+\sum\limits_{j=0}^{k-1}(-1)^{k-j}\binom{k}{j}\sum\limits_{i=1}^nu^ii^j$$

    根据归纳假设,对于$j=0,\cdots,k-1$,存在$j$次多项式$p_j(n)$使得$\sum\limits_{i=1}^nu^ii^j=u^np_j(n)-p_j(0)$,

    因此整理得:$$\large \sum\limits_{i=1}^nu^ii^k=\frac{u^{n+1}n^k}{u-1}+\frac{1}{u-1}\sum\limits_{j=0}^{k-1}(-1)^{k-j}\binom{k}{j}\left(u^np_j(n)-p_j(0)\right)$$

$$\large =u^n\left(\frac{u}{u-1}n^k+\sum\limits_{j=0}^{k-1}\frac{(-1)^{k-j}}{u-1}\binom{k}{j}p_j(n)\right)-\sum\limits_{j=0}^{k-1}\frac{(-1)^{k-j}}{u-1}\binom{k}{j}p_j(0)$$

    令$$\large p_k(n)=\frac{u}{u-1}n^k+\sum\limits_{j=0}^{k-1}\frac{(-1)^{k-j}}{u-1}\binom{k}{j}p_j(n)$$

    则容易验证有$\sum\limits_{i=1}^nu^ii^k=u^np_k(n)-p_k(0)$,结论成立。

===============================证明结束===============================

  回到原问题,现在只需考虑求出$p_k(n)$和$p_k(0)$,根据拉格朗日插值,如果我们求出了$p_k(0),p_k(1),\cdots,p_k(k)$

  ,我们便可在$\Theta(k)$时间求出$p_k(n)$。而这里想要求出$p_k$的系数似乎是困难的,因此我们考虑$p_k(i)$的关系,然后

  解方程求出这些值,注意到对$m=1,2,\cdots,k+1$,有:$$\large u^mp_k(m)-p_k(0)=\sum\limits_{i=1}^mu^ii^k=u^mm^k+\sum\limits_{i=1}^{m-1}u^ii^k$$

$$\large =u^mm^k+u^{m-1}p_k(m-1)-p_k(0)$$

  整理可得如下递推关系:$$\large p_k(m)=m^k+\frac{1}{u}p_k(m-1)\cdots\cdots(*)$$

  至此我们得到了一个包含$k+2$个未知数$p_k(0),p_k(1),\cdots,p_k(k+1)$和$k+1$个方程的方程组,我们还需要

  一个方程才能求解。但是别忘了,$p_k$是$k$次的,拉格朗日插值告诉我们$p_k(k+1)$可由$p_k(0),p_k(1),\cdots,p_k(k)$

  线性表示!具体来说,有:$$\large p_k(k+1)=\sum\limits_{i=0}^kp_k(i)\prod\limits_{0\leq j\leq k,j\ne i}\frac{k+1-j}{i-j}$$

$$\large =\sum\limits_{i=0}^kp_k(i)\frac{(k+1)!(-1)^{k-i}}{(k+1-i)i!(k-i)!}=\sum\limits_{i=0}^k(-1)^{k-i}\binom{k+1}{i}p_k(i)$$

  由此我们得到了最后一个方程,写得再简洁一些就是:$$\large \sum\limits_{i=0}^{k+1}(-1)^{k-i}\binom{k+1}{i}p_k(i)=0\cdots\cdots(**)$$

  接着只需求解这个方程组,注意到每个$p_k(i)$都可以容易地根据$(*)$式表示成$x_ip_k(0)+y_i$的形式,其中$$\large x_0=1,y_0=0$$

$$\large x_i=\frac{x_{i-1}}{u},y_i=\frac{y_{i-1}}{u}+i^k,i=1,2,\cdots,k+1$$

  将结果代入$(**)$式即可得到只含$p_k(0)$的一次方程,解出$p_k(0)$后自然可以得到其它的$p_k(i)$。

  最后,应用拉格朗日插值求出$p_k(n)$即可得到答案,总时间复杂度为$\Theta(k+\log n+\log R)$。

posted @ 2024-09-24 10:33  ldysy2102  阅读(26)  评论(0编辑  收藏  举报