题意
(m)种武器,第(i)种有(a_i)个,贡献为(in[1,b_i]),(n)个敌人,每个武器可以选择将贡献分给多个人,每个人都至少被贡献过。
一个方案不同,为某个武器贡献不同,或某个人被贡献的不同。(武器具体贡献给谁其实并不重要)
(n imes mle 10^5),(a_iin[1,10^5],b_iin[1,mod))
做法一
令总贡献为(a),(a)分给(m)个人:({a-1choose m-1})
但(a)上界太大了
我们这样做,比如:(len_1,len_2,len_3,len_4),(len_1)可以有(iin[0,len_1))种个数,(len_2)可以有(iin[0,len_2))种个数...(len_1)与(len_2)中有一个点可以选或不选,(len_2)与(len_3),(len_3)与(len_4)
然后所有的个数选(n-1)个,则我们可以用(x^i)的系数表示选择(i)个的方案数,令(F_i)表示这个,然后就是(F_i^{a_i}),合并的时候( imes(1+x))
暴力快速幂(O(nmlognloga_i)),用exp可以优化到(O(nmlogn)),但应该没什么用...
做法二
令(displaystyle G=prod_{i=1}^{n}left[mathbf{OGF}left{0,underset{b_i}{underbrace{1,ldots,1}} ight} ight]^{a_i})
多项式求导后:(displaystyle f^{(k)}(x)=sum_{i=k}^{infty}f_ii^{underline{k}}cdot x^{i-k}),则有(displaystylesum_{i=0}^{infty}f_ii^{underline{m-1}}=f^{(m-1)}(1))
则有(Ans=frac{1}{(m-1)!}F^{(m-1)}(1))
考虑(displaystyle F=frac{1}{x}prod_{i=1}^{n}left[mathbf{OGF}left{0,underset{b_i}{underbrace{1,ldots,1}} ight} ight]^{a_i})的((m-1))阶导
- 求(displaystyle t=prod_{i=1}^{n}t_i)的(k)阶导,反复利用((fg)'=f'g+fg')
- (displaystyle t^{(k)}=sum_{a_1+a_2+cdots+a_n=k}inom{k}{a_{1ldots n}}prod_{i=1}^{n}t_i^{(a_i)})
- (displaystyle t^{(k)}=k![z^k]prod_{i=1}^{n}sum_{j=0}^{infty}frac{t_i^{(j)}}{j!}z^j)
令(f_i=mathbf{OGF}left{0,underset{b_i}{underbrace{1,ldots,1}} ight}),特殊的,(f_0=dfrac{1}{x},a_0=1),则(displaystyle F=prod_{i=0}^{n}f_i^{a_i})