题目大意
有一个长度为
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
1≤k≤3),将
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=1≤i−kj≤i∑ai−kj
求最终的数列。
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 1≤n≤105, 1≤m≤106, 1≤ai≤109
\\
\\
\\
题解
您好,您的多项式能力为 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)=A∑xik
一次操作相当于给
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)
代码
//待填坑