生成函数好题
看到这里一种开关的点击方案内部是无标号的考虑指数生成函数
考虑则第(i)步达成目标的概率的指数生成函数
那么
对于(s_i=0)的开关
对于(s_i=1)的开关
所有开关的指数生成函数
(F(x)=prod_i F_i(x))
考虑到不同开关组成的方案内部是有顺序的
于是考虑转成普通生成函数
(f(x)=sum_{k>=0} k![x^k]F(x))
但(f(x))就是答案了吗?
并不是,因为我们求的是第一次
记(g(x))为走了(i)步状态不变的普通生成函数
记(h(x))为第(i)步第一次达成目标的普通生成函数
那么有
(g(x)*h(x)=f(x))
所以
(h(x)=frac {f(x)} {g(x)})
我们同样列出
然后
(G(x)=prod_i G_i(x))
那么(G(x))是(g(x))的指数生成函数
我们考虑知道(F(x))和(G(x))求(f(x))和(g(x))
注意到我们如果把(F(x))表示成
(sum_i a_i*e^ix)的形式
这个东西可以做个背包搞出来
那么对于(f(x))而言
(f(x) \ =sum_{k>=0} k![x^k]F(x) \ =sum_{k>=0} k!sum_i a_i [x^k]e^{ix} \ =sum_{k>=0} k!sum_i a_i frac{1}{k!}*(ix)^k \ =sum_i a_i sum_{k>=0}(ix)^k \ =sum_i a_i frac {1} {1-ix})
对于(g(x))是同理可算的
我们观察我们要求的答案事实上就是(h'(1)=frac {f'(1)g(1)-f(1)g'(1)}{g(1)^2})
但是当(x=1)的时候(f(1))和(g(1))都不收敛怎么办呢
洛必达搞
题解提供了一种别的思路:(f(x))和(g(x))同时乘上((1-x))
这样两个就都可以正常算了