【2019 Multi-University 1 L】Sequence 题解

题目大意

  有一个长度为 n n n 的数列 a 1 a_1 a1~ a n a_n an,进行 m m m 次操作,每次操作给定一个整数 k k k 1 ≤ k ≤ 3 1 \leq k \leq 3 1k3),将 a a a 数列变成 b b b 数列:
b i = ∑ 1 ≤ i − k j ≤ i a i − k j b_i=\sum_{1 \leq i-kj \leq i} a_{i-kj} bi=1ikjiaikj

  求最终的数列。

   1 ≤ n ≤ 1 0 5 ,    1 ≤ m ≤ 1 0 6 ,    1 ≤ a i ≤ 1 0 9 1 \leq n \leq 10^5,~~1 \leq m \leq 10^6,~~1 \leq a_i \leq 10^9 1n105,  1m106,  1ai109

\\
\\
\\

题解

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

  先是有一个经典的转换:设 a a a 数列的生成函数为 A = ∑ a i x i A=\sum a_ix^i A=aixi,考虑 a a a 数列经过一次 k k k 操作变成 b b b 数列,那么它们的生成函数是这样的:
B = ∑ b i x i = ( ∑ a i x i ) ( ∑ x i k ) = A ∑ x i k B=\sum b_ix^i=(\sum a_ix^i)(\sum x^{ik})=A\sum x^{ik} B=bixi=(aixi)(xik)=Axik

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

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

代码

//待填坑

你可能感兴趣的:(算法_FFT/NTT,算法_多项式/生成函数)