• 「ZJOI2019」开关


    生成函数好题

    看到这里一种开关的点击方案内部是无标号的考虑指数生成函数

    考虑则第(i)步达成目标的概率的指数生成函数

    那么

    对于(s_i=0)的开关

    [F_i(x)=sumlimits_{i = 0}^{infty} frac{(p_i*x)^{2i}}{(2i)!}=frac{e^{p_i*x} + e^{-p_i*x}}{2} ]

    对于(s_i=1)的开关

    [F_i(x)=sumlimits_{i = 0}^{infty} frac{(p_i*x)^{2i+1}}{(2i+1)!}=frac{e^{p_i*x} - e^{-p_i*x}}{2} ]

    所有开关的指数生成函数

    (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_i(x)=sumlimits_{i = 0}^{infty} frac{(p_i*x)^{2i}}{(2i)!}=frac{e^{p_i*x} + e^{-p_i*x}}{2} ]

    然后

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

    这样两个就都可以正常算了

    code

  • 相关阅读:
    Discuz热搜在哪里设置?
    Discuz如何设置帖子隐藏回复可见或部分可见方法
    新版Discuz!应用中心接入教程(转)
    Diszuz管理面版被锁怎么办?
    vs 2019 调试无法查看变量
    Google Docs 的格式刷快捷键
    chrome 的常用快捷键
    Activiti 数据库表结构
    activiti 报 next dbid
    尚硅谷Java基础_Day2
  • 原文地址:https://www.cnblogs.com/deaf/p/13227186.html
Copyright © 2020-2023  润新知