初賽大原題!(霧
稍微推一推就可以得到要算的式子是
∑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(n−kk)kd
稍微把組合數拆一下然後變個型,嘗試搞個遞推式出來
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 是很容易得到的。
我們原本要算的東西現在變成了
∑i(ai)ni(−1)a−iSb+a−i(n+1)
注意到實際上一次矩乘就可以把
Sb...Sb+a 給算出來,於是總複雜度爲
O(a3logn) 。
代碼太醜就不貼了。