题意:给定 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。。。