題意:給定a ,求
∑(∑ni=1ai∗bi)=m(∑ni=1bi)!∏ni=1(bi!)
m≤1018 ,
ai∈[1,23333],bi≥0
【奇怪的背景】
不知道多少天前。。。
Q神:hgr你有 nlognlogk 求 n 階線性遞推第 k 項的板子嗎
我:好像沒有啊。。。
Q神:這個辣雞51nod出了個裸題,寫不動了
於是看了波題。。。然後一臉懵逼???這怎麼就線性遞推了???
然後這題就鴿了
最近似乎比較有空。。。冷靜一下之後推了一波這個題發現。。。怎麼出個裸題啊
這個式子看起來比較嚇人。。其實是在搞笑。。。
設Fm=∑(∑ni=1ai∗bi)=m(∑ni=1bi)!∏ni=1(bi!)
我們稍微加上個東西然後一波xjb變換
Fm=∑(∑ni=1ai∗bi)=m(∑ni=1bi)!∏ni=1(bi!)∗∑nj=1bj[bj>0]∑ni=1bi =∑j=1n∑(∑ni=1ai∗bi)=m[bj>0](∑ni=1bi−1)!∏ni=1(bi!)bj =∑j=1n∑(∑ni=1ai∗bi)=m[bj>0](∑ni=1bi−1)!(bj−1)!∏i≠j(bi!) =∑j=1n∑(∑ni=1ai∗bi)=m[bj−1≥0](∑ni=1bi−1)!(bj−1)!∏i≠j(bi!) =∑j=1n∑(∑ni=1ai∗bi)=m−aj[bj≥0](∑ni=1bi)!∏ni=1(bi!)
因爲
bi≥0 ,所以直接有
Fm=∑i=1nFm−ai
於是直接套
n 階常係數齊次線性遞推就行了。
具體如何實現的話。。。叉姐論文和picks老師的博客有講。。。這東西要完整地寫出來不太好寫。。。式子太多了= =
而且這玩意寫起代碼來也是蛋疼的一b。。。
有個東西我還不太清楚。。。比如現在遞推式是
fm=∑ni=1cifm−i 。。。然後要先求初值
f0...fn 對吧。。。然而似乎除了直接用生成函數搞個
F(z)=11−C(z) 以外我沒有想到別的複雜度更好的辦法。。。(雖然這裏多項式求逆和分治FFT速度好像沒啥區別了hhhhh)
然而這裏一點都不瓶頸的樣子→_→
代碼太醜了不貼了
其實是TLE到現在棄療了
UPD:終於過了。。。辣雞數據錯了卡我這麼久。。。有兩個點的a_1是會大於23333的,要把他忽略掉。。。GTMD。。。