字符串
happy_windman
做自己想做的
展开
-
codeforces 126 B password (KMP Next数组的妙用)
题意是求给定的字符串中相同且最长的前缀、后缀、中间子串,其中三者允许有交集,但是中间子串不能包括开头和结尾。 如:fixprefixsuffix,答案为fix。 由next数组性质可知,若不少于两个位置的next值指向同一个位置(显然不包括0),则说明该位置是字符串中相同的前缀、后缀和中间子串。 那么预处理出next数组后,只需要线性从后往前遍历整个数组,将next值放入set或用bool数...原创 2019-04-16 14:20:44 · 146 阅读 · 0 评论 -
2017 CCPC哈尔滨站 Palindrome (马拉车+树状数组)
题目定义了 “一个半回文串”,其实就是形如abab,是一个长度3n-2的字符串,其中子串[1,2n-1]是长度为奇数的回文串,[n,3n-2]同样是长度为奇数的回文串。 那么所求可转化如下。 首先,因为回文串长度均为奇数,因此我们不需要考虑偶数长度的回文子串。 假设位置i的字符作为回文子串的中心时的最大回文半径为r[i](这个显然可以通过马拉车算法预处理出),则我们要求的是这样的 (i,j)...原创 2019-04-16 14:51:23 · 241 阅读 · 0 评论 -
牛客国庆集训派对Day5 H 我不爱她 (kmp+哈希)
很容易想到可以求出每个串的哈希值,这样可以O(∑|si|)求出每个前缀和后缀的哈希值,然后将后缀哈希值存入vector作为查询,将前缀哈希值用map记录每个值的 长度和,全部处理完毕后再遍历查询,在map中查找哈希值并将第二维的长度和加起来。 然而这样连样例都过不了! 因为要求的只是巧合值最大的,而这种做法对同一个串可能既算上了巧合值较小的串又算上了巧合值较大的串,导致多计了数。 对于b...原创 2019-04-16 15:13:36 · 215 阅读 · 0 评论