zoukankan      html  css  js  c++  java
  • 【洛谷p4705】玩游戏

    题目大意

    一个长度为(n)的序列(a)和长度为(m)的序列(b),对于(1..t)的每个(k),求

    [frac{1}{nm}sum_{x=1}^n sum_{y=1}^m (a_x+b_y)^k ]

    (n,m,tleq 10^5)

    题解

    [egin{aligned} ans&=frac{1}{nm}sum_{x=1}^n sum_{y=1}^m sum_{i=0}^k {kchoose i} a_x^i b_y^{k-i}\ &=frac{1}{nm} sum_{i=0}^k sum_{x=1}^n sum_{y=1}^m {kchoose i} a_x^i b_y^{k-i}\ &=frac{k!}{nm} sum_{i=0}^k sum frac{a^i}{i!} sum frac{b^{k-i}}{(k-i)!} end{aligned} ]

    下面考虑如何对所有(k)求出(sum_{j=1}^n a_j^i)
    写出(OGF)后变换枚举顺序。

    [egin{aligned} A&=sum_{i=0}^infty x^i sum_{j=1}^n a_j^i\ &=sum_{i=1}^n sum_{j=0}^infty a_i^j x^j\ &=sum_{i=1}^n frac{1}{1-a_ix} end{aligned} ]

    其实这里就可以分治然后通分了,但是常数比较大。
    如果对函数嵌套起来求导的那个玩意比较熟悉的话可以想到(ln(1-ax)'=frac{-a}{1-ax})

    [egin{aligned} A&=sum frac{1}{1-ax}\ &=sum 1-xfrac{-a}{1-ax}\ &=n-xsum ln(1-ax)'\ &=n-x*ln(prod 1-ax)' end{aligned} ]

    分治求出那个积之后带回去求可以求出(A,B),直接卷积即可。

  • 相关阅读:
    [面试题]什么是面向对象编程
    面向对象编程的新手理解
    Object of type type is not JSON serializable
    STL---map
    STL---llist
    Div标签使用inline-block有间距
    STL---vector
    KMP算法
    算法06
    算法05
  • 原文地址:https://www.cnblogs.com/zzqtxdy/p/12081287.html
Copyright © 2011-2022 走看看