Sol. CF1943B

赛时唐爆了。

发现题目中是 存在至少一个不是,非常奇怪。

于是考虑怎么样才可以满足。

\(s_{[x,y]}\) 是长度为 \(k\) 的回文串,显然 \(s\) 不是 \(k\)-好的充要条件是 \(s_{[x+1,y+1]}, s_{[x+2,y+2]},\cdots\) 都是 回文字符串。

假设他们都是回文串,那么根据性质,

  • \(k\) 为奇数时,\(s_x=s_y=s_{x+2}=s_{y-2}=\cdots,s_{x+1}=s_{y-1}=s_{x+3}=s_{y-3}=\cdots\)
  • \(k\) 为偶数时,除了 \(k\) 为偶数的性质,还有 \(s_x = s_{x+1}\),即 全部相等

画图感性理解一下。

如图,\(k=7\)

由于 \(s_{[1,7]}\) 是回文,所以 \(A=G\)。由于 \(s_{[2,8]}\) 是回文,所以 \(G=C\),同理,\(C=E\)

同理,\(B=D=F=H\)

如图,\(k=8\)

显然有 \(A=C=F=H\)\(B=D=G=I\)

又由于 \(s_{[1,8]}\) 回文,所以 \(D=E\)\(s_{[2,9]}\) 回文,所以 \(E=F\),所以全部相等。

判全部相等可以预处理,相邻相等也是。

但是会有两种特殊情况,即 \(k=1\)\(k=r-l+1\)

\(k=1\) 时,显然所有的子串都回文,\(k=r-l+1\) 时,只需要 \(s{[l,r]}\) 满足回文即可。

判断 \(s_{[l,r]}\) 是否回文可以用哈希或马拉车做。

哈希做法为正着和反着跑哈希是否相等,取 \(\bmod = 20220517\) 可过。

posted @ 2024-04-05 13:10  Cleshm  阅读(8)  评论(0)    收藏  举报