【2019 Multi-University 1 L】Sequence 题解

本文探讨了在数列操作问题中,如何利用多项式和NTT快速实现序列转换。通过生成函数的视角,解析了特定操作下数列变化的本质,展示了高效算法的设计思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意

  有一个长度为 nnn 的数列 a1a_1a1~ana_nan,进行 mmm 次操作,每次操作给定一个整数 kkk1≤k≤31 \leq k \leq 31k3),将 aaa 数列变成 bbb 数列:
bi=∑1≤i−kj≤iai−kjb_i=\sum_{1 \leq i-kj \leq i} a_{i-kj}bi=1ikjiaikj

  求最终的数列。

  1≤n≤105,  1≤m≤106,  1≤ai≤1091 \leq n \leq 10^5,~~1 \leq m \leq 10^6,~~1 \leq a_i \leq 10^91n105,  1m106,  1ai109

\\
\\
\\

题解

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

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

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

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

代码

//待填坑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值