zoukankan      html  css  js  c++  java
  • 2021ICPC济南 Strange Series

    【大意】

    对于 \(T\) 组数据,每组数据给定多项式 \(\displaystyle P(x)=\sum_{i=0}^n a_ix^i\) ,求 \(\displaystyle {1\over e}\sum_{m=0}^\infty {P(m)\over m!}\)

    其中,\(e\) 表示自然对数,定义式为 \(\displaystyle e=\sum_{i=0}^\infty {1\over i!}\)


    【分析】

    手玩一下样例 \(P(x)=1+2x\) 会发现:

    \(\begin{aligned} &{1\over e}\sum_{m=0}^\infty {P(m)\over m!} \\\\=&{1\over e}\sum_{m=0}^\infty {1+2m\over m!} \\\\=&{1\over e}(\sum_{m=0}^\infty {1\over m!}+2\sum_{m=1}^\infty {1\over (m-1)!}) \\\\=&{1\over e}(e+2e) \\\\=&3 \end{aligned}\)

    再手玩一下 \(P(x)=1+2x+x^2\) 就会发现更多:

    \(\begin{aligned} &{1\over e}\sum_{m=0}^\infty {P(m)\over m!} \\\\=&{1\over e}\sum_{m=0}^\infty {1+2m+m^2\over m!} \\\\=&{1\over e}\sum_{m=0}^\infty {1+3m+m(m-1)\over m!} \\\\=&{1\over e}(\sum_{m=0}^\infty {1\over m!}+3\sum_{m=1}^\infty {1\over (m-1)!}+\sum_{m=2}^\infty {1\over (m-2)!}) \\\\=&{1\over e}(e+3e+e) \\\\=&5 \end{aligned}\)

    会发现的一个规律就是 \(\displaystyle \forall k\geq 0\to \sum_{m=0}^\infty {m^{\underline k}\over m!}=\sum_{m=k}^\infty {1\over (m-k)!}=e\)

    所以,很显然想到,如果我们将多项式化为 \(\displaystyle P(x)=\sum_{i=0}^n a_ix^i=\sum_{i=0}^n b_ix^{\underline i}\) 的形式,则答案有:

    \(\begin{aligned} &{1\over e}\sum_{m=0}^\infty {P(m)\over m!} \\\\=&{1\over e}\sum_{m=0}^\infty {1\over m!}\sum_{i=0}^n b_im^{\underline i} \\\\=&{1\over e}\sum_{i=0}^n b_i\sum_{m=0}^\infty {m^{\underline i}\over m!} \\\\=&{1\over e}\sum_{i=0}^n b_ie \\\\=&\sum_{i=0}^n b_i \end{aligned}\)

    于是问题转化为了如何快速求 \(\{b_n\}\) 或如何快速求 \(\displaystyle \sum_{i=0}^n b_i\)


    如果是求解 \(\{b_n\}\) ,则需要将普通多项式转下降幂多项式,这是 \(O(n\log^2 n)\) 的,且常数极大,通过本题不大现实

    但考虑到普通幂和下降幂之间存在关系:\(\displaystyle x^n=\sum_{k=0}^n\left\{ \begin{matrix} n \\ k \end{matrix} \right\}x^{\underline k}\)

    代入 \(\displaystyle P(x)=\sum_{i=0}^n a_ix^i=\sum_{i=0}^n b_ix^{\underline i}\) 得:

    \(\begin{aligned} \sum_{i=0}^n b_ix^{\underline i}&=\sum_{i=0}^n a_ix^i \\\\\sum_{i=0}^n b_ix^{\underline i}&=\sum_{i=0}^n a_i\sum_{k=0}^i\left\{ \begin{matrix} i \\ k \end{matrix} \right\}x^{\underline k} \\\\\sum_{i=0}^n b_ix^{\underline i}&=\sum_{k=0}^n\sum_{i=k}^n a_i\left\{ \begin{matrix} i \\ k \end{matrix} \right\}x^{\underline k} \\\\b_i&=\sum_{k=i}^n a_k\left\{ \begin{matrix} k \\ i \end{matrix} \right\}&\text{(对比系数)} \\\\\sum_{i=0}^n b_i&=\sum_{i=0}^n\sum_{k=i}^n a_k\left\{ \begin{matrix} k \\ i \end{matrix} \right\} \\\\\sum_{i=0}^n b_i&=\sum_{k=0}^n a_k\sum_{i=0}^k \left\{ \begin{matrix} k \\ i \end{matrix} \right\} \end{aligned}\)

    注意到 \(a_k\) 后面项实际上是 \(\displaystyle \sum_{i=0}^k \left\{ \begin{matrix} k \\ i \end{matrix} \right\}\) ,即第二类斯特林数按行求和,本质上就是贝尔数 \(\displaystyle Bell_k=\sum_{i=0}^k \left\{ \begin{matrix} k \\ i \end{matrix} \right\}\)

    因此答案 \(\displaystyle \sum_{k=0}^n b_k=\sum_{k=0}^n a_kBell_k\)


    预处理的时候,用贝尔数的指数型生成函数 \(\displaystyle \hat{Bell}(x)=\sum_{i=0}^\infty Bell_i {x^i\over i!}=\exp(e^x-1)\) 预处理所有贝尔数

    每次询问的时候“向量点乘”一下即可。

  • 相关阅读:
    神马搜索 面试小结
    我的第一篇paper
    【转载】技巧:Vim 的纵向编辑模式
    实习求职小结
    将博客园界面打造成Hexo经典主题Light
    试一下Markdown
    四色标记算法
    射雕三部曲的优美片段
    Docker
    Sublime Text 3 文档
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/15647329.html
Copyright © 2011-2022 走看看