后缀数组
SA
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
CodeForces 128B String (后缀数组|优先队列)
题意:求所有子串中第k小的子串。子串相同位置不同视为不同。 题解:后缀数组 因为k是1e5,所以根据sa排名来遍历子串,k–就可以了。在计算lcp时,用height来比较当前串的长度,因为已经排好序,所以遍历到小于就可以停止了。 a[]a[]a[]:存第iii排名后缀的可操作长度。 看到有用优先队列的,具体做法是将所有字符先存进去,取出时在末尾添加其后面的一个字符,再写入。同样k大一点的话就不能采...原创 2020-03-29 22:02:12 · 209 阅读 · 0 评论 -
HDU 4622 Reincarnation (后缀数组|后缀自动机)
题意:给出区间,询问区间里不同子串个数。 题解:后缀自动机或者后缀数组 参考求解整个字符串的做法。 用kuangbin的话简单介绍一下SAM 从起点到每个点的不同路径,就是不同的子串。 到每一个点,不同路径,其实就是以这个点为最后一个字符的后缀,长度是介于(p->fa->len,p->len]之间的,个数也就清楚了。 而且这个其实是动态变化的,每加入一个字符,就可以知道新加了几...原创 2020-03-28 19:46:25 · 188 阅读 · 0 评论 -
HDU 5769 Substring (后缀数组)
题意:给出一个字符和一个字符串,求包含此字符的不同的子字符串。 题解:后缀数组 子串本质:后缀的前缀 不同子串数=Σ(n−sa[i]−height[i])Σ(n-sa[i]-height[i])Σ(n−sa[i]−height[i]),即去除相同前缀。 因为要包含此字符,所以还要去除不包含此字符的子串,从后往前,用preprepre数组来保存离当前字符最近的此字符的位置,取pre[i]pre[i]...原创 2020-03-27 21:21:47 · 174 阅读 · 0 评论 -
CodeForces 427D Match & Catch (后缀数组)
题意:求两个串的最小公共唯一子串 题解:后缀数组 利用height数组筛选,sa来区分子串位置。详见注释。 #define _crt_secure_no_warnings #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorit...原创 2020-03-27 10:59:47 · 227 阅读 · 1 评论 -
UVA 11107 Life Forms (后缀数组 + 二分)
题意:给出n个字符串,找出在超过一半的字符串出现过的子串,要求最长,如果有多解,按照字典序输出 题解:后缀数组 + 二分 二分子串长度,标记每个字符位置,出现n/2次,则在height中必定连续,然后遍历height,满足条件加入set去重即可。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio&...原创 2020-03-27 11:10:30 · 166 阅读 · 0 评论