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