洛谷$P5329\ [SNOI2019]$字符串 字符串
作者:互联网
正解:字符串
解题报告:
有两个很妙的方法,分别港下$QwQ$
首先为了表示方便,这里和题面一样设$s_i$表示去掉第$i$个字母得到的字符串.另设$lcp(i,j)$表示$suf_i,suf_j$的最长公共前缀
考虑现在如果要比较$s_i$和$s_j$.不妨设$i<j$
首先显然的是$i$之前和$j$之后的字符串都是一样的,于是现在就只要比较$[i,j]$这一段了.
考虑先求出$lcp(i,i+1)$,若$lcp(i,i+1)$的前缀长度大于等于$[i,j]$这一段的长度了,就说明两个字符串相等.
否则就比较$i+lcp(i,i+1)$和$i+1+lcp(i,i+1)$的大小就成.
于是就魔改下$cmp$直接$sort$就成$QwQ$
法二直接一个个考虑.
先从相邻字母不相同的部分分开始想趴$QwQ$.从$s_1$开始考虑,发现$s_1$和其他字母的首位一定不同,所以$s_1$一定要么放开头要么放末尾,放好之后考虑$s_2$,发现是一样的,于是一直这么做下去就完事$QwQ$
欧克现在考虑相邻字母相同?发现如果相邻字母相同也就说这两个删去的效果是一样的,于是考虑缩点($bushi$,把相邻相同的字母删去,就变成了上一个问题,排好序后把缩起来的放回来就好$QwQ$.
这样就可以直接$O(n)$把这题做掉了$QwQ$
$over$
标签:洛谷,lcp,字母,相邻,字符串,考虑,SNOI2019,QwQ 来源: https://www.cnblogs.com/lqsukida/p/11603094.html