Fleet of the Eternal Throne 后缀数组+字典树
Source
HDU 6138
My Solution
题意:给出n(n<=1e5)个字符串,且字符串的字符总和<=1e5,给出m个询问,每次给定x,y,找出对于给定str[x]和str[y]
的公共子串且满足这个串是所有串中的某个串的前缀,要求所得的公共串的长度尽可能大。
后缀数组+字典树
首先用给出的n个字符串建立字典树,
然后对于每次的询问,把str[x]和str[y]用‘#’连起来然后跑出后缀数组,
对于所有的ind[i](其中sa[ind[i]] <= len, ind[i]为其在sa数组中的下标),然后对于 ind[i] - ind[i-1] > 1则说明ind[i]和ind[i-1]直接存在!(sa[j] <= len)的情况,此时的height[ind[i]]表示
他们的后缀的最大相同后缀也就是 str[x]与str[y]的一个子串,然后用字典树O(length)的跑出护符条件的最大长度。
同理对于所有的ind'[i](其中sa[ind[i]] >= len)也跑一遍,记录最大值,就是答案了。
时间复杂度 O(nlogn)
空间复杂度 O(sum_length)
#include
#include
#include
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
共有 0 条评论