随笔分类 -  字符串/数据结构-后缀自动机

摘要:题意:统计一段字符串中形如UVU的子串个数(其中V的长度固定为g)。 问题等价于求满足$g+1\leqslant |j-i|\leqslant g+LCP(i,j)$的后缀(i,j)的对数,即$\sum\limits_{i<j}[g+1\leqslant |j-i|\leqslant g+LCP(i 阅读全文
posted @ 2019-09-17 15:30 jrltx 阅读(241) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点。 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点,求第k大的下标即可。 解法二: 建立后缀自动机,对后缀树(fail树)作线段树合并可得到每个结点包含 阅读全文
posted @ 2019-09-12 22:28 jrltx 阅读(390) 评论(0) 推荐(0)
摘要:题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出。 这道题算是我的一个黑历史了吧,以前我的做法是对这n个字符串建广义后缀自动机,然后在自动机上dfs,交上去AC了,然而事后发现算法假了,出了个数据把自己给hack了... 之前写的太烂了,决定重写一遍。 正确的操 阅读全文
posted @ 2019-09-12 21:16 jrltx 阅读(295) 评论(0) 推荐(0)
摘要:题目链接 题意:你要打印一段字符串,往尾部添加一个字符需要花费p元,复制一段字符到尾部需要花费q元,求打印完全部字符的最小花费。 一开始想的贪心,后来发现忘了考虑p<q的情况了,还纳闷怎么不对..(囧) 设$dp[i]$为打印完前i个字符的最小花费 第一种转移是$dp[i+1]=min(dp[i+1 阅读全文
posted @ 2019-08-13 22:26 jrltx 阅读(314) 评论(0) 推荐(0)
摘要:后缀数组: 后缀自动机: 阅读全文
posted @ 2019-07-22 17:13 jrltx 阅读(168) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 typedef long long ll; 6 const int N=1e6+10,M=26; 7 char s[N],s2[N]; 8 int n,f,k; 9 struct SAM { 10 int go[N][M],pre[N],mxl[N],c[... 阅读全文
posted @ 2019-05-09 23:30 jrltx 阅读(183) 评论(0) 推荐(0)