后缀数组
Cyhlnj
这个作者很懒,什么都没留下…
展开
-
POJ1743:Musical Theme
题目vjudgeSol先差分 然后求不可重叠最长重复子串bits/stdc++.h会CE# include # define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;cons原创 2018-01-23 18:15:34 · 171 阅读 · 0 评论 -
Bzoj3238: [Ahoi2013]差异
题面BzojSol刚完品酒大会那道题后再看这道题发现这就是道SBSBSB题 后缀数组+并查集 按heightheightheight从大到小做 heightheightheight是两个相邻rankrankrank的后缀的LCPLCPLCP 从大到小,那么每次合并heightheightheight的两边的集合,同时记录答案 两边集合两两配对的LCPLCPLCP一定就是这...原创 2018-02-22 17:08:28 · 235 阅读 · 0 评论 -
Bzoj4199:[NOI2015]品酒大会
题面Bzoj4199Sol后缀数组 显然的暴力就是求LCPLCPLCP+差分 404040分# include <bits/stdc++.h># define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;t...原创 2018-02-21 22:43:56 · 228 阅读 · 0 评论 -
Bzoj4566:[HAOI2016]找相同字符
题面BzojSol两个串拼在一起后求出后缀数组 然后显然的n2n2n^2暴力,就是直接枚举求LCPLCPLCP 又由于扫的时候是对heightheightheight取minminmin 那么可以用单调栈维护每一段的贡献相同的# include <bits/stdc++.h># define RG register# define IL inli...原创 2018-02-21 21:28:39 · 243 阅读 · 0 评论 -
BZOJ4650 : [NOI2016]优秀的拆分
题面传送门Sol求个以i" role="presentation">iii为结尾的AA" role="presentation">AAAAAA串的个数和以i" role="presentation">iii为开头的AA" role="presentation">AAAAAA串的个数 乘法原理即可,暴力求有95分 而你会发现,枚举l,经过i" role="presentation原创 2018-01-26 20:46:51 · 224 阅读 · 0 评论 -
BZOJ 4698: [SDOI2008]Sandy的卡片
题面有权限号的去看吧 LuoguSol差分后就是求多个串的最长公共子串 套路啊 拼在一起用不同字符隔开,后缀数组,二分答案,分块height,开桶记录即可 我把差分值离散了# include # define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))us原创 2018-01-25 10:35:49 · 192 阅读 · 0 评论 -
HiHocoder1419 : 后缀数组四·重复旋律4&[SPOJ]REPEATS:Repeats
题面Hihocoder VjudgeSol题目的提示说的也非常好 我对求LCP(P−L+len%l,P+len%L)" role="presentation">LCP(P−L+len%l,P+len%L)LCP(P−L+len%l,P+len%L)LCP(P - L + len \% l, P + len \% L)做补充 len=L原创 2018-01-24 22:15:25 · 262 阅读 · 0 评论 -
[SPOJ]DISUBSTR:Distinct Substrings&[SPOJ]SUBST1:New Distinct Substrings
题面Vjudge VjudgeSol求一个串不同子串的个数 每个子串一定是某个后缀的前缀,也就是求所有后缀不同前缀的个数 每来一个后缀suf(i)" role="presentation">suf(i)suf(i)suf(i)就会有,len−sa[i]+1" role="presentation">len−sa[i]+1len−sa[i]+1len-sa[i]+1的原创 2018-01-25 08:43:16 · 195 阅读 · 0 评论 -
Bzoj2946:[POI2000] 最长公共子串
题面求多个串的最长公共子串Sol套路,拼在一起,二分答案+后缀数组判定 把大于答案的heightheight分组,然后计算出一个组内是否有所有串的后缀 由于串只有55个开个桶就好了# include # define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))原创 2018-01-24 10:47:04 · 237 阅读 · 0 评论 -
后缀数组小结
前言一道模板题 后缀数组(SA)是一个比较强大的处理字符串的算法,是有关字符串的比较基础是吗?算法,所以必须掌握 实现主要有倍增和DC3DC3,而我太弱了只学了倍增目录知识点1.基数排序+倍增2.最长公共前缀Height一些要维护的东西ss:就是这个字符串,长度为lenlen rank[i]rank[i]:表示i到leni到len这个后缀在所原创 2018-01-23 15:07:20 · 242 阅读 · 0 评论 -
HiHocoder1415 : 后缀数组三·重复旋律3 & Poj2774:Long Long Message
题面HiHocoder1415 Poj2774Sol都是求最长公共子串,hihocoderhihocoder上讲的很清楚 把两个串拼在一起,中间用一个特殊字符隔开 那么答案就是排序后相邻两个不同串的后缀的heightheight 为什么呢? 如果答案为不相邻的两个后缀的前缀,计算它们最长前缀时必定要跨越过这些中间heightheight值,也就是选相邻的两个一定要比不选原创 2018-01-24 09:57:11 · 213 阅读 · 0 评论 -
POJ3261:Milk Patterns
题面vjudgeSol二分答案+分组,判断有没有一个组的后缀个数不小于 k 做法# include # define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;const int _原创 2018-01-23 20:32:55 · 187 阅读 · 0 评论 -
Bzoj4556: [Tjoi2016&Heoi2016]字符串
题面传送门Sol二分这个最长前缀的长度 考虑checkcheckcheck首先s[a..b]s[a..b]s[a..b]以iii开头子串如果要满足和s[c..d]s[c..d]s[c..d]的LCP>=midLCP>=midLCP>=mid 那么iii肯定是在后缀数组的rankrankrank的一个区间内 这个区间显然可以二分/倍增出来iii同时还要满足b...原创 2018-04-11 13:57:53 · 250 阅读 · 0 评论