随笔分类 -  字符串

摘要:XV.Annihilate 我当年为什么会手贱开这卡常大毒瘤题呀 思路1. 用vector存下每个字符串在后缀排序后的下标,然后每次枚举两个串,用一个vector里面的数在另一个里面two-pointers找到它两侧的数,然后用ST表求LCP。 时间复杂度$O\Big(\sum|S|(\log\su 阅读全文
posted @ 2021-04-01 10:42 Troverld 阅读(129) 评论(0) 推荐(0) 编辑
摘要:XIV.[SDOI2016]生成魔咒 动态SA?这怎么办? 我们考虑往每个后缀后面全都加入一个数。很明显,如果这样搞的话,你必须每加入一个数后都要重新后缀排序,不太可能完成。 这时,我们发现,如果这不是加入一个数,而是加入一整条后缀,那就会轻松很多,一个平衡树就能搞定。 思考后会发现,如果我们将整个 阅读全文
posted @ 2021-04-01 10:40 Troverld 阅读(39) 评论(0) 推荐(0) 编辑
摘要:XIII.[BJWC2010]外星联络 和上题一样,没啥好说的,直接建出笛卡尔树即可。 代码: #include<bits/stdc++.h> using namespace std; int stk[500100],tp,L[500100],R[500100],id,pt; namespace S 阅读全文
posted @ 2021-04-01 10:38 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要:XII.[TJOI2015]弦论 题解 阅读全文
posted @ 2021-04-01 10:36 Troverld 阅读(39) 评论(0) 推荐(0) 编辑
摘要:XI.[APIO2014]回文串 题解 阅读全文
posted @ 2021-04-01 10:33 Troverld 阅读(40) 评论(0) 推荐(0) 编辑
摘要:X.[SCOI2012]喵星球上的点名 我居然做出了这题……难以置信! 首先,思路很明显是把所有串全怼一起(包括名字和询问串),加上分隔符,然后跑一遍后缀数组。 我们仍然可以用单调栈求出关于每个询问串与它相同的区间。即,如果以询问串为前缀的那个后缀的rankp的话,它的合法区间$[L,R] 阅读全文
posted @ 2021-04-01 10:31 Troverld 阅读(52) 评论(0) 推荐(0) 编辑
摘要:IX.[JSOI2007]字符加密 这题的思路非常简单——断环复制成链,然后直接后缀排序一下即可。 为什么呢? 我们考虑两条后缀。假如它们在前n位中有所不同,显然它们之间的相对顺序不会有问题; 否则,假如它们前n位全都相同,则因为反正最后输出的就是最后一个字符,所以相对顺序没有影响,直接按照 阅读全文
posted @ 2021-04-01 10:29 Troverld 阅读(59) 评论(0) 推荐(0) 编辑
摘要:VIII.[SDOI2008]Sandy的卡片 ……有什么意义吗…… 差个分,然后就是IV.[POI2000]公共串的内容了,套个单调队列,O(n)解决,假如你用DC3的话。 代码: #include<bits/stdc++.h> using namespace std; int all,n,m 阅读全文
posted @ 2021-03-31 16:58 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要:VII.[HAOI2016]找相同字符 第一道自己做出的SA题祭~~~ 实际上和上一题没啥区别的说…… 我们发现,这题实际上就是对于两个串中所有的后缀求\operatorname\(之和(因为这两个后缀共有\)\operatorname个前缀是相同的,即串中有这么多子串是相同的)。 老套路,俩串 阅读全文
posted @ 2021-03-31 16:57 Troverld 阅读(62) 评论(0) 推荐(0) 编辑
摘要:VI.[AHOI2013]差异 1i<jnlen(Ti)+len(Tj)2×LCP(Ti,Tj) 这个柿子可以拆成两部分,即 \(\sum\limits_{1\leq i<j\leq 阅读全文
posted @ 2021-03-31 16:55 Troverld 阅读(46) 评论(0) 推荐(0) 编辑
摘要:V.UVA11107 Life Forms 这题同上题类似,只不过把“在全部串中出现”变成了“在超过一半(即\left\lfloor\dfrac{2}\right\rfloor+1)个串中出现”。 这题中我的方法是上题中提到的“two-pointers+单调队列”算法。第一遍跑求出所有满足“出现 阅读全文
posted @ 2021-03-31 16:54 Troverld 阅读(53) 评论(0) 推荐(0) 编辑
摘要:IV.[POI2000]公共串 后缀数组如何应对多个串的情况呢? 答案很简单:把所有串都拼起来! 但这又有个问题,拼起来的串不会出现一些错误吗? 没关系,这里就有解决方案了:在相邻的串间插入一个从未出现过的字符。 我们考虑在拼起来的字符串中求出ht数组。则仍然考虑二分公共子串长度ip,在$h 阅读全文
posted @ 2021-03-31 16:52 Troverld 阅读(68) 评论(0) 推荐(0) 编辑
摘要:III.[USACO06DEC]Milk Patterns G 同上一题思路类似,我们仍然建出后缀数组。 考虑任何出现k次的子串,以它们作为前缀的后缀在sa数组中一定是连续的——这一点可以从上文中的\text直接看出,因为相邻的结果一定大于等于不相邻的结果。 因此我们只需要求出ht阅读全文
posted @ 2021-03-31 16:49 Troverld 阅读(57) 评论(0) 推荐(0) 编辑
摘要:I.不同子串个数 后缀数组在处理子串问题时往往有奇效,因为后缀的前缀即是子串,而后缀数组正是按照前缀排序的后缀。 回到本题。因为后缀的前缀是子串,则一条后缀与其它所有后缀的LCP的最长长度,即是这条后缀的前缀子串中所有被重复计数的串的数量。 我们掏出求得的ht数组。初学SA时大家一定接触过一个重 阅读全文
posted @ 2021-03-31 16:47 Troverld 阅读(266) 评论(0) 推荐(0) 编辑
摘要:V.[SCOI2007]压缩 这种DP状态需要考虑到各种状态的题最讨厌了…… 思路1.设f[i][j]\(\)[i,j]里面所有东西压一起的最小代价 有两种转移: 砍成两段拼一起 样例里面这种方法,MaRR=aaaa 这种倍增法 然后我就写出了这样的代码: #include<bits/ 阅读全文
posted @ 2021-03-30 14:50 Troverld 阅读(54) 评论(0) 推荐(0) 编辑
摘要:XII.[CFGYM100221C]Forbidden Subwords ”双向无限“之类东西太抽象了,我们不妨从简单点的地方考虑。比如说,有限串。 一个有限串中没有出现任何禁忌串的充要条件是什么?沿着AC自动机上边走时没有碰到任何结束点。 现在,我们考虑一个右侧无限的串(即有一个明确开头,但另一端 阅读全文
posted @ 2021-03-30 14:42 Troverld 阅读(62) 评论(0) 推荐(0) 编辑
摘要:XI.CF1437G Death DBMS 考虑建出AC自动机,然后在上面跑询问串。于是问题转为单点修改,路径求 max,无脑上树剖在fail树上维护即可。 注意到会有相同的串,那就在每个节点上一个multiset维护最大值即可。 复杂度 O(nlog2n)。 代码: #i 阅读全文
posted @ 2021-03-30 14:40 Troverld 阅读(51) 评论(0) 推荐(0) 编辑
摘要:X.[ICPC2019 WF]First of Her Name 这题的一种解法是把所有东西(名字串和翻转的询问串)建出一棵树来,然后跑树上后缀排序,用二分+哈希求出height数组,然后使用单调栈找出每个位置最多能够向左向右延伸多远。但是按照某人的说法出题人好像出了卡此算法的数据,所以最后WA 阅读全文
posted @ 2021-03-30 14:38 Troverld 阅读(135) 评论(0) 推荐(0) 编辑
摘要:IX.[BJWC2011]禁忌 老套路,建出AC自动机,并求出每个节点的ok。 之后呢? 考虑dp。 令fi,j表示在一个长度为i的串,当前在点j的可能性。 则有: 对于任意k[0,alphabet), 如果t[t[j].ch[k]].oktrue,那么$ 阅读全文
posted @ 2021-03-30 14:34 Troverld 阅读(63) 评论(0) 推荐(0) 编辑
摘要:"[SDOI2014]数数" 这题是AC自动机与各种dp相结合的范例。 首先,按照套路,我们建出~~自动AC机~~。然后,因为是N的所有数的总数,很容易想到 数位dp (实际上它如果是在L,R之间所有数的总数则更明显)。 令fx,len,lim表示: 在自动机上x号节点 阅读全文
posted @ 2020-04-26 17:42 Troverld 阅读(129) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示