Icefox的博客

生活不止眼前的苟且,还有诗和远方。

bzoj4650 [Noi2016]优秀的拆分(计数+SA)

好久没写SA了的赶脚qaq 考试时写了95分的O(n2)O(n2)O(n^2)暴力hash 我们考虑枚举中间分割点i,以i结尾的AA串个数*以i+1开头的AA串个数就是对答案的贡献。 于是我们只需要处理出f[i],以i结尾的AA串个数 g[i],以i开头的AA串个数这两个数组。 我们考虑枚...

2018-06-27 23:07:09

阅读数:38

评论数:0

bzoj4310 跳蚤(SA+二分答案+贪心)

原题描述有误,应该是把原串分成最多k个子串,然后在每个子串中挑出字典序最大的子串,使得这些串中最大的字典序最小。我们二分答案是第K小子串,用SA搞出这个串的位置,然后去贪心判定是否可行,即是否存在一种划分使得所有子串都小于等于这个串。如何贪心判定呢?首先如果有一个s[i]>s[ansl],则...

2018-04-28 12:43:13

阅读数:89

评论数:0

bzoj5073 [Lydsy1710月赛]小A的咒语(SA+lcp+dp+贪心)

考虑dp,f[i][j]表示A串前i字符分成j段能匹配的最大B串前缀长度。 那么如果i+1不选,转移到f[i+1][j]如果i+1选,则我们可以贪心的尽量多匹配一些,即匹配t=lcp(i+1,f[i][j]+1)个,转移到f[i+t][j+1]我们SA+RMQ预处理一下,O(1)查询lcp即可。...

2018-04-27 22:01:05

阅读数:115

评论数:0

bzoj4556 [Tjoi2016&Heoi2016]字符串(SA+二分答案+线段树)

给定一个串S,每次询问S[a..b]中的子串与S[c..d]的lcp的最大值。子串其实就可以当做后缀。那么每次就是求后缀[a..b]与c的lcp最大值。我们考虑二分答案ans,用SA处理出h数组,那么就可以再二分答案得到c向前向后拓展的最远距离。即[l..r]中的串与c的lcp都>=ans,...

2018-03-29 21:24:37

阅读数:101

评论数:0

bzoj4892 [Tjoi2017]dna(SAM/SA/二分答案+Hash)

在后缀自动机上跑一跑就好啦。O(n)O(n)O(n) SA题解:portalO(nlogn)O(nlogn)O(nlogn) upd:还可以二分答案+Hash来求lcp哟。O(nlogn)O(nlogn)O(nlogn) SAM #include <cstdio&am...

2018-03-26 15:57:50

阅读数:164

评论数:0

bzoj3998 [TJOI2015]弦论(SA/SAM)

求第k小子串。如果t=0,直接拿sa线性搞即可。如果t=1,我复杂度就炸了。。。然而本机和luogu都跑了过去(可见数据之水,逃)。正解大概是SAM,待更新。3.24upd:蒟蒻我终于看懂了SAM的板子orz 顾名思义,SAM就是能识别所有后缀的自动机。我们有一个朴素的构建SAM的想法:把每一个...

2018-03-22 12:49:07

阅读数:96

评论数:0

bzoj5159 [Tjoi2014]电影评分(splay+后缀平衡树)

按道理应该是一定会挂精度的,正解应该是后缀平衡树来比较两个数的小数部分的大小。但是数据水,直接long double是可以水过的【逃】。正解待更新。。 tips:注意是最早的而不是标号最小的,我们还要枚举一下题意,发现他说的是如果评分相同就按出现时间给排名【逃】。 3.13upd:更新正解 ...

2018-03-12 23:04:44

阅读数:131

评论数:0

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

感觉以前听ly神犇说过吧。就是贪心地选择后缀排名更小的。 证明可以戳这里看看:传送门

2018-02-22 19:59:11

阅读数:132

评论数:0

bzoj5137 [Usaco2017 Dec]Standing Out from the Herd(后缀数组)

我们首先把所有串接在一起,用分隔符隔开,跑一遍sa,求出h数组。然后我们考虑每个串如何算贡献,一个串的所有后缀一定是在rank数组上的若干连续段,对于每一个连续段[l,r],我们首先计算出本质不同的子串个数,类似这题。然后考虑因出现在其他串而要减少的贡献,就是lcp(l-1,l)+lcp(r,r+...

2018-02-12 23:28:15

阅读数:163

评论数:0

CF204E Little Elephant and Strings(同bzoj3277)

原题,还写了好久orz。传送门

2017-10-07 14:11:41

阅读数:270

评论数:0

bzoj3796 Mushroom追妹纸(SA+二分答案+kmp)

把s1和s2接在一起,求最长公共子串。二分答案就好了。。。此题就多一个判断,要求s3不能出现在公共子串里,那我们就预处理一下,用kmp求出s3在s2中出现的位置,处理成L数组,即可O(1)判断。

2017-08-26 16:58:07

阅读数:290

评论数:0

bzoj3676 [Apio2014]回文串(manacher+SA+二分+lcp)

manacher板子戳这里 我们用manacher枚举回文串,用SA求这个串的出现次数。(利用h数组二分求最大包含区间[l…r],则出现次数为r-l+1)类似这道题。不错的好题。。。

2017-08-26 15:58:09

阅读数:160

评论数:0

bzoj3277&&bzoj3473 串(SA+二分+lcp)

首先老套路,我们把所有串接在一起,用分隔符隔开,做SA,求出h数组,并用st表求lcp。然后分析题目,我们对于每个串分别统计答案。假定我们正在做第i个串,在总串中从sta开始,到ed结束。则我们要求的就是每个后缀a[sta…ed],a[sta+1…ed]…a[ed]对答案的贡献和。假设我们在求a[...

2017-08-26 14:22:20

阅读数:217

评论数:0

bzoj3238 [Ahoi2013]差异(SA+单调栈求所有区间最小值和)

我们很明显可以直接预处理出来T(i)+T(j)的总和,为n* (n-1)*(n+1)/2(推一下样例就可以了),然后主要问题是处理lcp的和。 这个地方我们可以直接在height数组上搞,我们可以发现,每一对(i,j)都对应了h数组上的一段区间、甚至是点!(当i,j两个子串rank相连的时候)那...

2017-08-24 21:59:47

阅读数:206

评论数:0

bzoj3172 [Tjoi2013]单词(SA+暴力,类似bzoj2754)

把所有单词连在一起,SA求出h数组,对于每一个单词看做一个询问,暴力往前往后扫,看有几个暴力统计即可。反正N才200

2017-08-24 20:33:03

阅读数:235

评论数:0

bzoj2946 [Poi2000]公共串(SA+二分答案 同poj3450)

求多个串的最长公共子串,一模一样,题解见这里

2017-08-24 19:52:07

阅读数:250

评论数:0

bzoj2754 [SCOI2012]喵星球上的点名(后缀数组+暴力)

把所有串接在一起,打上分割符。SA求出h数组。然后就暴力。。每一个询问串往后往前扫h大于询问串长度的。然后暴力统计答案。。。复杂度很玄学。 tips:这题数据范围太大。。注意越界问题的细节。。

2017-08-24 18:00:18

阅读数:331

评论数:0

bzoj2534 Uva10829L-gap字符串(SA+lcp同bzoj2119)

求形如ABA的子串个数,同bzoj2119,题解看这里 tips:没说全是小写字母你就别换成int了。。。无谓的WA三发#include

2017-08-24 17:00:16

阅读数:210

评论数:0

bzoj2119 股市的预测(SA+lcp)

走势相同,要进行差分,数的范围太大,还要离散化,然后就是求有多少子串样子是ABA,且B的长度已给定。枚举A的长度x,统计所有A的长度为x的答案。 我们以x对原串进行分块,每一块的第一个点设为关键点,我们发现对于一个ABA,第一个A一定覆盖且只覆盖一个关键点,我们枚举关键点i,i和i+mm+x往左...

2017-08-15 00:01:35

阅读数:204

评论数:0

bzoj3230 相似子串(SA+lcp+二分)

首先用后缀数组处理出h数组。因为要问子串的排名,所以我们再记一个数组num[i],表示前i个后缀有几个本质不同的子串。然后我们用二分查找就可以找到排序后的第i个子串是谁了。然后就是求一下lcp了。。还有反过来的lcp。。算清角标就好了。。还有很坑的一点:可能有超过int范围个实质不同的字串=,=....

2017-08-03 16:20:00

阅读数:244

评论数:0

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