Test0612 继续扮演
题意简述
给定两个长度为 \(N(N\leq 10^5)\) 的非负整数序列 \(a\) 和 \(b\) 。定义 \(b\) 的 \(k\) 变换后得到的 序列 \(b'\) 为 \(b'_i=b_{(i+k)\ mod\ d}\) 。要求求出所有的 \(k\) ,满足 \(b\) 的 \(k\) 变换后的 \(b'\) 序列满足:存在一个 \(m\) 次的多项式 \(P(t)\) ,使得 \(\forall\ t\in[0,n)\) ,均满足 \(P(t) \equiv a_t-b'_t\pmod{998244353}\) 。
题意分析
定义两个序列相似:若存在一个 \(m\) 次的多项式 \(P(t)\) ,使得 \(\forall\ t\in[0,n)\) ,均满足 \(P(t)=A_t-B_t\) ,则称序列 \(A\) 与序列 \(B\) 相似,记做 \(A\thicksim B\) 。序列相似具有传递性:若 \(A\thicksim C\) ,\(B\thicksim C\) ,则 \(A\thicksim B\) 。
假定序列长度恰好是 \(m+2\) 。根据序列相似的传递性,我们可以考虑间接证明 \(A\) 与 \(B\) 是否相似。构造长度同样为 \(m+2\) 的全 \(0\) 序列 \(C=\{0,0,0,...\}\)(下标从 \(1\) 开始)。利用 \(A\) 和 \(C\) 的前 \(m+1\) 位做差构造出多项式 \(R\) ,再令 \(C_{m+2}=-R(m+2)+A_{m+2}\)。那么此时得到的序列 \(C\) 与序列 \(A\) 相似。同时,我们记 \(C_{m+2}\) 为序列 \(A\) 的特征值。则序列 \([A_1,A_{m+2}]\) 的特征值 \(\lambda (A_1,A_{m+2})=-\sum_{i=1}^{m+1}A_i\times g_i(g_i=\prod_{j=1}^{j\leq m+1\&j\ne i }\frac{m+2-j}{i-j})+A_{m+2}\) 。同理可以得到序列 \(B\) 的特征值。若序列 \(A\) 的特征值与序列 \(B\) 的特征值相同,那么 \(A\thicksim C\thicksim B\) ;反之,则 \(A\not\thicksim B\) 。特征值相同是两序列相似的充要条件。
但是序列的长度可能不是 \(m+2\)。这时该如何判断序列相似呢?我们可以先令 \(\alpha(i)=\lambda(A_i,A_{i+m+1})\) ,同理得到 \(\beta(i)\) 。现在考虑如何通过 \(\alpha\) 和 \(\beta\) 来判断当前情况下序列 \(A\) \(B\) 是否相似。这时有一个结论:如果 \(\alpha(i)=\beta(i)\) 且 \(\alpha(i+1)=\beta(i+1)\) ,那么 序列 \(A[i,i+m+2]\) 与 \(B[i,i+m+2]\) 也是相似的(因为这两个 \(m\) 次多项式过了相同的 \(m+1\) 个点,所以这两个多项式是等同的)。也就是说,如果在 \([1,n-m-1]\) 的这一段前缀中均有 \(\alpha(i)=\beta(i)\) 那么 \(A\thicksim B\) 。
但是 \(B\) 还可以旋转。如果每次旋转都重新求特征值,复杂度显然不能接受。考虑到当 \(B\) 旋转时,序列 \([l,r]\) 变成了 \([l+k,r+k]\),它们所对应的多项式的图像仅仅是横坐标均 \(+k\) 而已,但是特征值只与纵坐标有关。故:旋转不会改变特征值。再深入思考,既然旋转不会改变特征值,那么在最原始的 \(B\) 序列中,最后面 \(m+1\) 个数的 \(\beta\) 值就可以通过倍增 \(B\) 处理出来。得出完整的 \(\beta\) 序列后,再与 \(\alpha\) 做一次字符串匹配统计相同的前缀个数以及位置就可以了。
最后的关键问题:在求解 \(\alpha\) 和 \(\beta\) 时,若对每个点暴力求解,复杂度高达 \(O(n\times m)\) 无法接受。而其实 \(\alpha(x)=\sum_{i=x}^{m+x+2} A_i\times g_i\) ,两个多项式的下标相同时做法可以用减法卷积FFT来优化 。于是这个题就完结撒花了。于是这个人也完结撒花了 。
反思归纳
针对某个序列的性质,如果能将这个性质折射到某一个数上面,那就再好不过了