初赛大原题!(雾
稍微推一推就可以得到要算的式子是
∑k(n+1−kk)kb(n−k)a
可以用二项式定理展开,得到
∑i(ai)ni(−1)a−i∑k(n+1−kk)kb+a−i
前面的求和指标是 O(a) 的,很小,所以现在想办法算后面的东西。
注意到算 k 次方和的时候是可以矩乘的,这个玩意同理。
设
稍微把组合数拆一下然后变个型,尝试搞个递推式出来
Sd(n)=∑k≥0((n−1−kk)+(n−1−kk−1))kd =Sd(n−1)+∑k+1≥0(n−2−kk)(k+1)d =Sd(n−1)+∑k(n−2−kk)∑j(dj)kj =Sd(n−1)+∑j(dj)Sj(n−2)
于是 Sd(n) 这玩意就可以愉快地矩乘了。
设
F1×2(d+1)(n)=[S0(n),S1(n)...Sd(n),S0(n+1),S1(n+1)...Sd(n+1)]
那么 F(n) 到 F(n+1) 的转移矩阵 A 是很容易得到的。
我们原本要算的东西现在变成了
注意到实际上一次矩乘就可以把 Sb...Sb+a 给算出来,于是总复杂度为 O(a3logn) 。
代码太丑就不贴了。