Comet OJ

题意

(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})

[egin{aligned} Ans&=sum_{a=1}^{infty}([x^a]G)cdotinom{a-1}{m-1}\ &=sum_{a=0}^{infty}!left([x^{a}]dfrac{G}{x} ight)!cdotinom{a}{m-1}\ &=frac{1}{(m-1)!}sum_{i=0}^{infty}([x^i]F)i^{underline{m-1}} end{aligned}]

多项式求导后:(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})

[egin{aligned}Ans&=frac{1}{hat m}F^{(m)}(1)\&=frac{1}{hat m}left(hat m!left[z^{hat m} ight]prod_{i=0}^{n}left(sum_{j=0}^{infty}frac{f_i^{(j)}}{j!}z^{j} ight)^{a_i} ight)(1)\&=[z^m]prod_{i=0}^{n}left(sum_{j=0}^{infty}frac{f_i^{(j)}(1)}{j!}z^j ight)^{a_i}end{aligned} ]

原文地址:https://www.cnblogs.com/Grice/p/12940354.html