s [ 1... x ] = s [ 1 ] s [ 2 ] s [ 3 ] . . . s [ x ] s[1...x]=s[1]s[2]s[3]...s[x] s[1...x]=s[1]s[2]s[3]...s[x]组成的字符串
p r e [ s , x ] = s [ 1... x ] , s u f [ s , x ] = s [ ∣ S ∣ − x + 1... ∣ S ∣ ] pre[s,x]=s[1...x],suf[s,x]=s[|S|-x+1...|S|] pre[s,x]=s[1...x],suf[s,x]=s[∣S∣−x+1...∣S∣]
对于一个 0 < p ≤ ∣ S ∣ 0< p\le|S| 0<p≤∣S∣,若满足对于任意 i ∈ [ 1 , ∣ S ∣ − p ] i\in[1,|S|-p] i∈[1,∣S∣−p], s i = s i + p s_i=s_{i+p} si=si+p,则称 p p p是该串的一个周期
对于一个 0 ≤ r < ∣ S ∣ 0\leq r<|S| 0≤r<∣S∣,若满足 p r e [ s , r ] = s u f [ s , r ] pre[s,r]=suf[s,r] pre[s,r]=suf[s,r],则 r r r是该串的一个 b o r d e r border border
周期与 b o r d e r border border存在转化关系如下
p r e [ s , r ] pre[s,r] pre[s,r]是该串的 b o r d e r border border ⇔ \Leftrightarrow ⇔ ∣ S ∣ − r |S|-r ∣S∣−r是该串的一个周期
l c p ( A , B ) lcp(A,B) lcp(A,B)表示 A , B A,B A,B两个串的最长公共前缀
对于拥有周期 p p p的串 S S S,一定满足的是 l c p ( s [ 1... ∣ S ∣ ] , s [ 1 + p . . . ∣ S ∣ ] ) = ∣ S ∣ − p lcp(s[1...|S|],s[1+p...|S|])=|S|-p lcp(s[1...∣S∣],s[1+p...∣S∣])=∣S∣−p
然后可以做的就是对于一个位置 x x x,找到最大的一个 l l l满足 s [ x . . . x + l − 1 ] s[x...x+l-1] s[x...x+l−1]有周期 P P P
用 S A SA SA求一下 s [ x . . . ∣ S ∣ ] s[x...|S|] s[x...∣S∣]和 s [ x + P . . . ∣ S ∣ ] s[x+P...|S|] s[x+P...∣S∣]的 l c p lcp lcp即可…
对于一个字符串 S S S的周期 p , q p,q p,q,若 p + q ≤ ∣ S ∣ p+q\leq |S| p+q≤∣S∣,则 g c d ( p , q ) gcd(p,q) gcd(p,q)也是 S S S的周期
钦定 p > q p>q p>q,不妨设 d = p − q d=p-q d=p−q,对于某个 i i i分类讨论
若 i > p i>p i>p,则 i − p > 0 i-p>0 i−p>0,故 s [ i ] = s [ i − p ] = s [ i − p + q ] = s [ i − d ] s[i]=s[i-p]=s[i-p+q]=s[i-d] s[i]=s[i−p]=s[i−p+q]=s[i−d]
否则 i ≤ p i\leq p i≤p,则 i + q ≤ ∣ S ∣ i+q\leq |S| i+q≤∣S∣,故 s [ i ] = s [ i + q ] = s [ i + q − p ] = s [ i − d ] s[i]=s[i+q]=s[i+q-p]=s[i-d] s[i]=s[i+q]=s[i+q−p]=s[i−d]
然后我们就发现了一个新的周期 d d d,发现他们在更相减损,故得证
对于一个字符串 S S S的周期 p , q p,q p,q,若 p + q − g c d ( p , q ) ≤ ∣ S ∣ p+q-gcd(p,q)\leq |S| p+q−gcd(p,q)≤∣S∣,则 g c d ( p , q ) gcd(p,q) gcd(p,q)也是 S S S的周期
证明貌似还不会…
若字符串 u , v u,v u,v满足 2 ∣ u ∣ ≥ ∣ v ∣ 2|u|\ge |v| 2∣u∣≥∣v∣,则 u u u在 v v v中的所有匹配位置组成一个等差数列
考虑在序列中第一次匹配,第二次匹配以及另外某一次匹配
设第一次与第二次的间距为 d d d,第二次与另外一次的间距为 q q q
可以发现的是 u u u的最小周期 p p p也是第一次匹配和第二次匹配的并的周期
同时 d d d也是该串周期, g c d ( d , q ) gcd(d,q) gcd(d,q)也为该串周期
若 p < d p<d p<d,那么第二次匹配相差不应为 d d d,故 p ≥ d p\ge d p≥d,所以 d = p ≤ g c d ( d , q ) d=p\leq gcd(d,q) d=p≤gcd(d,q),故有 d ∣ q d|q d∣q
由上推导可知
若字符串 u , v u,v u,v满足 2 ∣ u ∣ > ∣ v ∣ 2|u|>|v| 2∣u∣>∣v∣,且出现次数超过 2 2 2,则其构成的等差数列公差为 u u u的最小周期 p p p
证明如上
字符串 S S S的所有不小于 ∣ S ∣ 2 \frac{|S|}{2} 2∣S∣的 b o r d e r border border长度组成一个等差数列
策爷的论文证明貌似有点奇怪…
并不是很清楚为什么 p ∣ q p|q p∣q之后就直接等差了…
yy了一个东西,就是已经可以证明 p ∣ q p|q p∣q,那么就是所有都是其倍数,只需要证明能出来 n − p , n − 2 p n-p,n-2p n−p,n−2p的这些 b o r d e r border border就可以了…注意到最小周期是 p p p,那么显然其倍数也是周期,周期对应了 b o r d e r border border,故得证
根据如上的一个引理,我们已经证明了对于一个串,其所有长度不小于其一半的 b o r d e r border border是一个等差数列
考虑更小的,对其进行按长度的二进制分组,即 [ 1 , 2 ) , [ 2 , 4 ) , [ 4 , 8 ) . . . [ 2 k , n ) [1,2),[2,4),[4,8)...[2^k,n) [1,2),[2,4),[4,8)...[2k,n)的各位一类
对于在某个类中的 b o r d e r border border,考虑其最长的,那么剩下的所有 b o r d e r border border一定都是最长的那个 b o r d e r border border的 b o r d e r border border
故以最长的 b o r d e r border border为母串,第一个的结论变成立了,故有如下进一步的结论
字符串 S S S的所有 b o r d e r border border能划分成 log ∣ S ∣ \log |S| log∣S∣个等差数列,对其二进制分组即可
一个串 S S S,多次询问 S [ l . . . r ] S[l...r] S[l...r]的所有 b o r d e r border border,用等差数列表示
对每个 [ 2 i , 2 i + 1 ) [2^i,2^{i+1}) [2i,2i+1)考虑,若 p r e ( S , u ) = s u f ( S , u ) pre(S,u)=suf(S,u) pre(S,u)=suf(S,u)且 u ∈ [ 2 i , 2 i + 1 ) u\in[2^i,2^{i+1}) u∈[2i,2i+1),则一定有 p r e ( S , 2 i ) pre(S,2^i) pre(S,2i)是该 b o r d e r border border的前缀, s u f ( S , 2 i ) suf(S,2^i) suf(S,2i)是该 b o r d e r border border的后缀
求出 p r e ( S , 2 i ) pre(S,2^i) pre(S,2i)在 s u f ( S , 2 i + 1 ) suf(S,2^{i+1}) suf(S,2i+1)中的所有匹配位置,以及 s u f ( S , 2 i ) suf(S,2^i) suf(S,2i)在 p r e ( S , 2 i + 1 ) pre(S,2^{i+1}) pre(S,2i+1)中的所有匹配位置
翻转区间取交即可
注意这里的匹配运用引理1可知,均是公差相同的等差数列,故而取交可以做到 O ( 1 ) O(1) O(1)
引理:对于一个回文串 S S S,其的一个后缀 s u f ( S , x ) suf(S,x) suf(S,x)也是回文串当且仅当 p r e ( S , x ) = s u f ( S , x ) pre(S,x)=suf(S,x) pre(S,x)=suf(S,x),即其也为 b o r d e r border border
推论:一个字符串的所有回文后缀的长度可以表示为 log ∣ S ∣ \log |S| log∣S∣个等差数列
证明:我是sb,找到最长回文后缀之后就变成了回文串的问题了…
如果 S = a b S=ab S=ab,满足 a , b a,b a,b均为回文串,则称 S S S是一个双回文串
引理1:如果 S S S是一个双回文串,则存在一种拆分方法 S = a b S=ab S=ab,满足 a a a是其最长回文前缀或 b b b是其最长回文后缀
引理2:如果 S = x 1 x 2 = y 1 y 2 = z 1 z 2 ( ∣ x 1 ∣ < ∣ y 1 ∣ < ∣ z 1 ∣ ) S=x1x2=y1y2=z1z2 (|x1|<|y1|<|z1|) S=x1x2=y1y2=z1z2(∣x1∣<∣y1∣<∣z1∣),满足 x 2 , y 1 , y 2 , z 1 x2,y1,y2,z1 x2,y1,y2,z1均是回文串,则 x 1 , z 2 x1,z2 x1,z2也为回文串
满足 S S S的最小后缀是 S S S本身的串称为 L y n d o n w o r d Lyndon word Lyndonword
引理1:若 u , v u,v u,v均为 L y n d o n Lyndon Lyndon串,且 u < v u<v u<v,则 u v uv uv也为 L y n d o n Lyndon Lyndon串
引理2:任意一个字符串 S S S可以划分为 S = s 1 s 2 s 3.. S=s1s2s3.. S=s1s2s3..,满足 s 1 s 2 s 3 s1s2s3 s1s2s3均为 L y n d o n Lyndon Lyndon串且 s i ≥ s i + 1 s_i\ge s_{i+1} si≥si+1,且这种分解方法是唯一的
我们初始将其设为一段一个字符,每次合并相邻的满足 s i < s i + 1 s_i<s_{i+1} si<si+1的串,根据引理1这仍是一个 L y n d o n Lyndon Lyndon串