【2019 Multi-University 1 L】Sequence 题解

题目大意

  有一个长度为 nn 的数列 a1a_1~ana_n,进行 mm 次操作,每次操作给定一个整数 kk1k31 \leq k \leq 3),将 aa 数列变成 bb 数列:

bi=1ikjiaikjb_i=\sum_{1 \leq i-kj \leq i} a_{i-kj}

  求最终的数列。

  1n105,  1m106,  1ai1091 \leq n \leq 10^5,\ \ 1 \leq m \leq 10^6,\ \ 1 \leq a_i \leq 10^9

题解

  您好,您的多项式能力为 0,请做题

  先是有一个经典的转换:设 aa 数列的生成函数为 A=aixiA=\sum a_ix^i,考虑 aa 数列经过一次 kk 操作变成 bb 数列,那么它们的生成函数是这样的:

B=bixi=(aixi)(xik)=AxikB=\sum b_ix^i=(\sum a_ix^i)(\sum x^{ik})=A\sum x^{ik}

  一次操作相当于给 AA 乘一个多项式,那么操作顺序是不要紧的,因此三种操作分别对应三个多项式:(xi)m1(\sum x^i)^{m_1}(x2i)m2(\sum x^{2i})^{m_2}(x3i)m3(\sum x^{3i})^{m_3}
  然后这三个多项式都可以先算出来(系数都是组合数),那么对于原序列就是 3 次 NTT 的事儿。

  时间 O(nlogn)O(n \log n)