卧薪尝胆,厚积薄发。
继续扮演
Date: Wed Jan 02 20:23:37 CST 2019
In Category:
NoCategory
Description:
两个序列
$a$
和
$b$
,求出哪些
$k$
满足
$b$
循环右移
$k$
位后
$a$
和
$b$
每一位对应相减
$\%998244353$
的值可以看成是一个
$m$
次多项式再
$1,2,\dots n$
处的点值。
$1\leqslant n\leqslant 10^5$
Solution:
就是说
$a_i-b_{k+i\mod n}=p(i)\mod 998244353$
其中
$p$
是一个
$m+1$
次多项式。
首先把
$b$
复制一倍接在后面,然后就不用考虑循环的问题。
注意到
$p(i)-p(i-1)$
是一个
$m$
次多项式,也就是说
$p$
每差分一次,次数就减一,因此我们可以把
$a-b$
也差分
$m+1$
次,这个其实就相当于把
$a$
和
$b$
分别差分再相减,那么这个时候
$a$
和
$b$
能匹配当且仅当
$a$
和
$b$
的后
$n-m-1$
项,也就是去掉前
$m+1$
项完全相同,这时我们可以用
$KMP$
求解,于是现在问题就变成了如何求
$k$
阶差分,找规律发现
$k$
阶差分的公式为:
$$
\Delta^ka_p=\sum_{i=0}^k(-1)^k\binom{k}{i}a[p-i]=\sum_{i=0}^p(-1)^k\binom{k}{i}a[p-i]
$$
这其实是个卷积,于是用
$NTT$
计算即可。
Code:
代码就不放了
In tag:
数学-多项式-快速数论变换 技巧-差分
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡