zoukankan      html  css  js  c++  java
  • 【清华集训2016】如何优雅地求和

    记多项式第(i)项系数是(b_i)

    [ans = b_0 + sum_{i=1}^{m}b_i sum_{k=1}^{n} k^i inom{n}{k} x^k(1-x)^{n-k} ]

    我们考虑用第二类斯特林数展开(k^i)

    [k^i=sum_{j=1}^{i}S(i,j)j! inom{k}{j} ]

    于是

    [ egin{aligned} ans &= b_0 + sum_{i=1}^{m}b_i sum_{k=1}^{n} k^i inom{n}{k} x^k(1-x)^{n-k}\ &= b_0 + sum_{i=1}^{m}b_i sum_{k=1}^{n} sum_{j=1}^{i}S(i,j)j! inom{k}{j} inom{n}{k} x^k(1-x)^{n-k}\ &= b_0 + sum_{i=1}^{m}b_i sum_{j=1}^{i}S(i,j)j! sum_{k=j}^{n} inom{k}{j} inom{n}{k} x^k(1-x)^{n-k}\ &= b_0 + sum_{i=1}^{m}b_i sum_{j=1}^{i}S(i,j)j! sum_{k=j}^{n} inom{n}{j} inom{n-j}{k-j} x^k(1-x)^{n-k}\ &= b_0 + sum_{i=1}^{m}b_i sum_{j=1}^{i}S(i,j)j! inom{n}{j} x^j sum_{k=j}^{n} inom{n-j}{k-j} x^{k-j}(1-x)^{n-k}\ &= b_0 + sum_{i=1}^{m}b_i sum_{j=1}^{i}S(i,j)j! inom{n}{j} x^j\ end{aligned} ]

    获得一个(O(m^2))做法

    我们考虑优化,展开第二类斯特林数

    [S(i,j)=frac{1}{j!} sum_{k=1}^{j}(-1)^{j-k} inom{j}{k} k^i = frac{1}{j!} sum_{k=1}^{infty}(-1)^{j-k} inom{j}{k} k^i ]

    于是

    [ egin{aligned} ans &= b_0 + sum_{i=1}^{m}b_i sum_{j=1}^{i}S(i,j)j! inom{n}{j} x^j\ &= b_0 + sum_{j=1}^{i} j! inom{n}{j} x^j sum_{i=1}^{m}b_i S(i,j)\ &= b_0 + sum_{j=1}^{i} j! inom{n}{j} x^j sum_{i=1}^{m}b_i frac{1}{j!} sum_{k=1}^{j}(-1)^{j-k} inom{j}{k} k^i\ &= b_0 + sum_{j=1}^{i} inom{n}{j} x^j sum_{i=1}^{m}b_i sum_{k=1}^{m}(-1)^{j-k} inom{j}{k} k^i\ &= b_0 + sum_{j=1}^{i} inom{n}{j} x^j sum_{k=1}^{m}(-1)^{j-k} inom{j}{k} sum_{i=1}^{m}b_ik^i\ end{aligned} ]

    发现(sum_{i=1}^{m}b_ik^i)就是(f(k)-b_0)

    出题人非常凉心地给出了点值让我们不需要多点求值

    于是

    [ egin{aligned} ans &= b_0 + sum_{j=1}^{i} inom{n}{j} x^j sum_{k=1}^{m}(-1)^{j-k} inom{j}{k} sum_{i=1}^{m}b_ik^i\ &= b_0 + sum_{j=1}^{i} inom{n}{j} x^j sum_{k=1}^{m}(-1)^{j-k} inom{j}{k} (f(k)-b_0)\ end{aligned} ]

    后面的部分是一个卷积的形式,NTT解决

    (b_0)显然是(f(0))

    于是就做完了

    时间复杂度(O(mlogm))

    不过据说各种(O(m^2))做法乱艹过这题

  • 相关阅读:
    Java Thread 总结
    用 for/in 在 Java 5.0 中增强循环
    JAVA中synchronized和lock详解
    centos vim的安装目录在哪里
    Cannot add task 'wrapper' as a task with that name already exists.
    servlet的生命周期
    I/O同个文件需要注意的问题
    分治策略---求最大子数组
    Java实现 100!的阶乘
    Java中方法的重载与覆盖(随笔01)
  • 原文地址:https://www.cnblogs.com/deaf/p/14487211.html
Copyright © 2011-2022 走看看