Gym101237C The Palindrome Extraction Manacher

题意

给定字符串\(S\),分段\(S=A+B+C+D+E\)\(A,B,C,D,E\)可以为空串。要求方案\(B+D\)为回文串,且\(|B+D|\)最大

做法

假设\(|B|>|D|\),则\(B=rev(D)+T\)\(T\)为某回文串
跑manacher,对于一组\([l,i,r]\),就是找\(S_{1,l-1}\)的一组最长后缀使得其在\(S_{r+1,n}\)作为子串出现

具体做法就是对于\(rev(S)\)就SAM,然后\(S\)的每个前缀在上面定位,对于\([l,i,r]\),令\(pre_{l-1}\)为在后缀树上的定位,然后一直往上爬直到走到原来的\(S_{r+1,n}\)内部

题外话

好久没写SAM了,复习一下,看懂了多一点原理

猜你喜欢

转载自www.cnblogs.com/Grice/p/12819462.html
今日推荐