[BZOJ4319]cerc2008 Suffix reconstruction(贪心+构造+后缀数组)

题目描述传送门题目大意:给出一个sa,求一个合法的字符串的方案,或无解-1。题解无解就是a..z都填完了但是还不够 所以肯定是按照rank填,填的过程中相邻两个rank的地方尽量是一样的,实在不行再不一样 按照rank从小到大填数,对于相邻两个rank,比较两个的后面那个位置,如果后面的那个位...

2017-05-04 17:24:23

阅读数 458

评论数 0

[BZOJ2534]Uva10829L-gap字符串(后缀数组+st表)

题目描述传送门题目大意:求字符串s中有多少子串,满足形如ABA形式,其中A是非空字符串,且B的长度正好为L题解这道题和股市的预测实际上时一样的…不过现在忘得快干净了… B的长度已知是L,首先枚举A的长度i 然后将整个字符串按照长度为i分块,枚举每一个块的端点,设为l,令r=l+i+m,然后对l...

2017-04-18 08:59:10

阅读数 753

评论数 0

[BZOJ4698][Sdoi2008]Sandy的卡片(后缀数组+st表||后缀自动机)

题目描述 传送门 题目大意:给出n个长度为mi的串,求趋势相同的最长公共子串 题解 将前后两个数差分之后就是一个裸的最长公共子串问题了 将所有的串怼在一起求sa和height,然后用一个指针扫出来至少含有n个串的 代码 #include #include #include #in...

2017-04-16 21:44:23

阅读数 600

评论数 0

[BZOJ3796]Mushroom追妹纸(hash+后缀数组+二分)

题目描述传送门题解把s1和s2接在一起,中间加一个分隔符 预处理出s3在s1和s2中的哪些位置出现过(hash) 求出sa和height,容易知道答案一定在相邻的两个在不同串里的后缀中产生 对于每一对相邻的后缀,二分一下满足条件的最大长度,即没有出现s3(前缀和) 时间复杂度O(nlogn...

2017-03-28 16:18:22

阅读数 725

评论数 0

[BZOJ4278][ONTAK2015]Tasowanie(后缀数组+贪心)

题目描述 传送门 题解 和队列变换那道题差不多 就是将两个串连起来求一个sa,然后归并的时候如果两个数相等的话就拿后缀字典序比较小的那一个 中间要加一个比较大的字符,因为如果两个串比较 代码 总结 后缀数组一定要写p>=n,不要写p>n 从10s+蹦到2s+

2017-03-03 07:17:56

阅读数 369

评论数 0

[BZOJ4199][Noi2015]品酒大会(后缀数组+并查集)

题目描述传送门题解别出心裁的一道sa,想了好久。。40ptsO(n2)O(n^2)的做法应该很好想吧 sa+st表就可以了qwq100pts首先求出height数组 考虑如果只求一个r的话怎么做 显然可以将height数组分组,每个组里都是height>=r的,然后对于每一个组计数+取...

2017-02-16 11:27:34

阅读数 459

评论数 0

[BZOJ4556][Tjoi2016&Heoi2016]字符串(后缀数组+二分+st表+主席树)

题目描述传送门题解思路清晰就很好写… 首先二分答案mid 找到Suffix(c),在height数组中向左向右分别二分最远的lcp为mid的后缀 用st表实现O(1)O(1)查询 然后就判断[l,r]中是否出现了a…b的后缀 用可持久化线段树判断即可常数大,需要卡卡常数 学习了学姐的一...

2017-01-11 14:52:00

阅读数 677

评论数 0

[BZOJ3879]SvT(后缀数组+单调栈)

题目描述传送门题解求出sa和height 把每一组询问的子串按照rank排序,顺序枚举每一个后缀,每一个后缀的贡献就应该为它与它前面的所有后缀的lcp之和 维护一个单调递增的栈、栈中每一个元素的数量以及栈中元素和就可以了代码#include<algorithm> #include&...

2017-01-11 14:39:03

阅读数 743

评论数 0

后缀数组 学习笔记

后缀数组定义搞懂定义是学习后缀数组的关键。 子串:字符串 S 的子串 r[i..j] ,i ≤ j ,表示 r 串中从 i 到 j 这一段,就是顺次排列r[i],r[i+1],…,r[j]形成的字符串。 后缀:后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串 r 的从 第 i...

2016-12-29 07:09:27

阅读数 990

评论数 4

[BZOJ4516][Sdoi2016]生成魔咒(后缀数组+链表||后缀自动机)

题目描述传送门题解题意实际上是求对于每一个前缀本质不同的子串个数 那么可以转化为对于每一个前缀只求包含最后一个点的和前面不重复的子串个数,然后将答案累加 把串反过来建后缀数组 然后实际上就是对于每一个后缀求与其它后缀不重复的前缀个数,也即是后缀长度减去height值 但是需要注意的一点是要...

2016-12-28 18:38:57

阅读数 714

评论数 0

[BZOJ3230]相似子串(后缀数组+二分+st表)

题目描述传送门题解题目实际上是要求最长公共前缀和后缀的长度的平方和。个人认为题目描述中a和b应该取min 把这个串正反都求一下sa和height 由于是本质不同的子串,所以每一个后缀的贡献应该是当前串刨去它和前一个的lcp的剩下的前缀 可以求出贡献的前缀和,显然满足单调性 对于每组询问,二...

2016-12-28 11:30:35

阅读数 655

评论数 3

[BZOJ3238][Ahoi2013]差异(后缀数组+单调栈||后缀自动机+树形dp)

题目描述传送门题解这道题实际上还是非常有趣的。 首先根据题目的描述答案应该为所有后缀的组合长度再减去两两的lcp 首先算出来总和 求出sa和height,用两次单调栈可以求出来以某一个点的height为最小值的最长区间 可以发现以这个点为分界点,区间的左右两边两两组合最小值一定是当前点的h...

2016-12-28 10:00:50

阅读数 605

评论数 0

[BZOJ2251][2010Beijing Wc]外星联络(后缀数组)

题目描述传送门题解首先求出来sa和height 然后其实就是暴力计算一下每一个后缀向后延伸多远。 注意要去掉重复的,也就是说要从每一个最长的那个后缀开始,并且对于每一个后缀,要从大到小合并。 时间复杂度O(nlogn+n2)O(nlogn+n^2)代码#include<iostream...

2016-12-28 09:55:24

阅读数 490

评论数 0

[POJ1226]Substrings(后缀数组+二分)

题目描述传送门题解先将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中,后缀的起始位置的最大值与最小值之差是否不小于当前答案(判断能否做到不重叠)。...

2016-12-27 23:02:21

阅读数 564

评论数 0

[SPOJ220]PHRASES - Relevant Phrases of Annihilation(后缀数组+二分)

题目描述传送门 题意:给定 n 个字符串,求在每个字符串中至少出现两次且不重叠的最长子串。题解先将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中...

2016-12-27 22:59:26

阅读数 474

评论数 0

[POJ3294]Life Forms(后缀数组+二分)

题目描述传送门题解将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求sa和height。然后二分答案,将后缀分成若干组,每一组的height都不小于mid,判断每组后缀是否出现在不小于 k=n/2+1 个的原串中。注意: ①n=1的时候要特判 ②每一个height都不能超...

2016-12-27 20:12:05

阅读数 500

评论数 0

[BZOJ3277]串(后缀数组+二分+st表)

题目描述传送门题解orz hxy sam随便艹 不过我感觉这道题用sa的做法非常厉害吖 由于每一个子串一定是某一个后缀的前缀,所以可以对于每一个后缀求其对答案能贡献多少个子串,也就是这个后缀有多少个满足题意的前缀。同时可以发现,对于同一个后缀SiS_i,如果Si,jS_{i,j}满足题意那么S...

2016-12-27 18:59:14

阅读数 885

评论数 0

[POJ3415]Common Substrings(后缀数组+单调栈)

题目描述传送门 题意:给定两个字符串 A 和 B ,求长度不小于 k 的公共子串的个数(可以相同)。题解首先把一个串接在另一个串的后面,中间放一个没出现过的字符。 由于每一个子串都是某一个后缀的前缀,求出sa和height了之后,我们可以将height分组,组内都是height>=k的后...

2016-12-26 21:20:13

阅读数 1223

评论数 0

[POJ3693]Maximum repetition substring(后缀数组+st)

题目描述传送门 题意:给定一个字符串,求重复次数最多的连续重复子串。输出满足题意的子串,如果有多个,输出字典序最小的。题解先枚举长度 L ,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出现 2 次,记这个子字...

2016-12-26 11:36:16

阅读数 376

评论数 0

[SPOJ687]REPEATS - Repeats(后缀数组+st)

题目描述传送门 题意:给定一个字符串,求重复次数最多的连续重复子串。题解先枚举长度 L ,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出现 2 次,记这个子字符串为 S ,那么 S 肯定包括了字符 r[0],...

2016-12-26 11:29:14

阅读数 444

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭