![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
LOJ#2278. 「HAOI2017」字符串【差异区间长度限制下的字符串匹配】
题目描述:link题目分析:相当于可以将 pip_ipi 中的一段长度为 kkk 的区间变为通配符然后进行匹配。那么 S[l...r]S[l...r]S[l...r] 能和 pi[1...L]p_i[1...L]pi[1...L] 匹配的条件是存在一个 pip_ipi 的前缀 pi[1...j]p_i[1...j]pi[1...j],使得 S[l...l+j−1]S[l...l+j-1]S[l...l+j−1] 与 pi[1...j]p_i[1...j]pi[1...j] 匹配,S[l原创 2020-07-07 22:19:27 · 185 阅读 · 0 评论 -
CF963D Frequency of String【多串在母串的出现位置】
题目描述:保证 mim_imi 互不相同。题目分析:mim_imi 在 sss 中的匹配次数是 O(∣S∣∗∑mi)O(|S|*\sqrt {\sum {m_i}})O(∣S∣∗∑mi) 级别的。证明可以用AC自动机来理解,设fail树上每个点的祖先中结束节点的个数为 xxx,因为长度各不相同,所以总长度至少为 x(x+1)2\frac {x(x+1)}22x(x+1),所以 x≤∑mix\le \sqrt {\sum {m_i}}x≤∑mi。总共会遍历 ∣S∣|S|∣S∣ 个点的祖原创 2020-07-07 11:20:49 · 268 阅读 · 0 评论 -
20200706 字符串专题
CF653F Paper task求给出的括号序列本质不同的合法括号子串个数,n≤5∗105n\le5*10^5n≤5∗105对每种前缀和分开统计的做法很好想。二分,区间最小值满足条件(单调栈),去重就后缀数组调整二分范围。详见 blog后缀自动机也差不多,对每个节点找任意一个endpos,同样限制出一个范围。详见 blog2...原创 2020-07-06 21:10:52 · 257 阅读 · 0 评论 -
Codeforces932G Palindrome Partition【回文树DP(附border的若干证明)】
题目描述:给一个长度为nnn(nnn为偶数)的串原创 2020-06-12 22:49:24 · 352 阅读 · 0 评论 -
Codeforces1334G Substring Search【通配字符匹配问题】
题目描述:给出字母排列ppp以及字符串s,ts,ts,tsss中的字符ccc可以匹配ttt中的ccc和pcp_{c}pc,求sss在ttt中的出现位置。n≤2∗105n\le2*10^5n≤2∗105题目描述:法一:枚举字符累加匹配数枚举一个字符ccc,将sss中为ccc的位置设为1,ttt中匹配的位置设为1,然后做卷积。每个字符都做完后 iii 位置的值就是[i−∣s∣+1,i][i-|s|+1,i][i−∣s∣+1,i]匹配sss的位置个数,检验是否等于∣s∣|s|∣s∣即可。复杂度O原创 2020-05-27 14:58:04 · 203 阅读 · 0 评论 -
字符串专题选讲
字符集大小为2312^{31}231两个字符串能够匹配当且仅当第KKK大字符所在位置相同给出字符串A,BA,BA,B,以及TTT次修改操作。每次将BBB串的第xxx个字符修改为yyy,在每次修改操作之后求出BBB串在AAA串中的匹配次数。(保证AAA中不存在相同字符,BBB中不存在相同字符)∣A∣,∣B∣,T≤105|A|,|B|,T\le10^5∣A∣,∣B∣,T≤105没有修改的话可以KMP,离散化后用树状数组维护排名有修改就只能 hashhashhash,记一个字符串的哈希值为∑i=1n原创 2020-05-22 16:08:31 · 278 阅读 · 1 评论 -
20200507 zr T1【序列自动机上重链剖分+二分(倍增) 求 字典序第k小子序列的后p位】
题目描述:给定长度为 nnn 的由小写字母组成的字符串 SSS,令 TTT 为 SSS 本质不同的非空子序列形成的集合,QQQ 次询问,每次回答 TTT 中字典序从小到大第 kkk 的子序列的后 ppp 个字符。如果ppp大于子序列长度,直接输出子序列,如果没有这样的子序列,输出−1-1−11≤n≤3∗105,1≤Q≤105,1≤k≤1018,∑p≤106,p≥11\le n\le3*10^...原创 2020-05-07 21:23:30 · 510 阅读 · 0 评论 -
BZOJ4560: [JLoi2016]字符串覆盖【KMP+贪心+DP】
题目描述:字符串A有N个子串B1,B2,…,Bn。如果将这n个子串分别放在恰好一个它在A中出现的位置上(子串之间可以重叠),这样A中的若干字符就被这N个子串覆盖了。问A中能被覆盖字符个数的最小值和最大值。字符串长度A<=10000,N<=4,子串长度<=1000题目分析:首先用KMP求出每个串在A中的出现位置。先考虑直接DP的做法:设f[S][i]f[S][i]f[S...原创 2020-03-27 23:01:06 · 290 阅读 · 0 评论 -
模拟赛20200218【递归/构造,连接字符串最小字典序,带目标打怪兽】
T1:环n,l,k≤100,T≤10n,l,k\le100,T\le10n,l,k≤100,T≤10题解:解法一:观察B操作相当于把1之间的0的个数其中一个+1,后一个-1,1循环代表0的个数也是循环的。根据循环对应关系画一画可以得出0的个数只能有2种,削去小的那部分,剩下的问题转化为了子问题(子问题的答案反过来再加上小的部分的0,就是当前0的个数的可行解)。那么T(n,k)=T(k,...原创 2020-02-25 10:07:30 · 186 阅读 · 0 评论 -
字符串笔记 (20200204)
最小周期 =n −=n~-=n − 最大border关于循环串的疑问:如果最小周期为xxx,且∣S∣|S|∣S∣不能被xxx整除,那么是否可能存在一个周期y>xy>xy>x,使得∣S∣|S|∣S∣能被yyy整除?关于跳KMP的疑问:如果BBB为ABkAB^kABk的最小周期,且AAA是BBB的后缀,为什么当k>1k>1k>1时ABk...原创 2020-02-04 23:26:43 · 168 阅读 · 0 评论 -
【COCI 2011-2012 contest#4】decode【本质匹配KMP】
题目描述:总字符数均≤106\le10^6≤106的两篇文章S,TS,TS,T,把TTT中的单词替换成某一个单词且不同单词对应不同替换后能与SSS中连续的一段匹配,求最早可能匹配到到的位置。题目分析:相同的单词对应的单词也是相同的,所以只需要比较每个单词与前面最近的与它相同的单词的距离,如果SSS和TTT中的距离相同则可以匹配,用Trie树可以方便快速地找前一个相同单词。Code:#in...原创 2019-11-13 09:33:07 · 190 阅读 · 0 评论 -
BZOJ2213: [Poi2011]Difference【"动态" DP】
题目描述:已知一个长度为n的由小写字母组成的字符串,求一个子串,出现最多的字母出现的个数减去该段中出现过的出现次数最少的字母出现的个数最大。求这个个数。题目分析:法一:枚举是哪两种字母相减,设为a,b,那么就只需要把a,b从原串中拿出来,a的值+1,b的值-1,求最大子段和,虽然a,b并不一定是真实串中最多最少的字母,但是这样做的最大值一定是答案。每个位置最多拿出来52次,复杂度是O(...原创 2019-09-14 21:39:44 · 142 阅读 · 0 评论 -
BZOJ 4278: [ONTAK2015]Tasowanie 【后缀数组 / 二分哈希求LCP】
题面:给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。第一行包含一个正整数n(1<=n<=200000),表示A串的长度。第二行包含n个正整数,其中第i个数表示Ai。第三行包含一个正整数m(1<=m<=200000),表示B串的长度。第四行包含m个正整数,其中第i个数表示Bi。Sample Input61 2 3 1...原创 2019-03-31 12:07:44 · 215 阅读 · 0 评论 -
BZOJ 2119: 股市的预测 【枚举长度找关键点+后缀数组求LCP】
题意:给一个长度为N的A数组,一个时间间隔M,要你把A数组的每个元素与前一个作差得到一个长度为N-1的B数组。在B数组中找形如aba的子串的个数,其中b的长度为M。N,M<=50000题目分析:在b的长度一定的情况下,怎么找形如aba的串?枚举a的长度,设为len,把序列分成这样的几段:那么a串一定包含上面画的关键点中的某一个。只需要枚举这些点,假设枚举到点i,那么只需要看i与...原创 2019-04-01 08:33:56 · 150 阅读 · 0 评论 -
BZOJ 4032: [HEOI2015]最短不公共子串 【DP+后缀自动机】
题面:Description在虐各种最长公共子串、子序列的题虐的不耐烦了之后,你决定反其道而行之。下面,给两个小写字母串A,B,请你计算:(1) A的一个最短的子串,它不是B的子串(2) A的一个最短的子串,它不是B的子序列(3) A的一个最短的子序列,它不是B的子串(4) A的一个最短的子序列,它不是B的子序列A和B的长度都不超过2000题目分析:这题本质上就是个DP,只不过...原创 2019-04-01 10:25:38 · 169 阅读 · 0 评论 -
BZOJ 3998: [TJOI2015]弦论【后缀自动机】
题面:对于一个给定长度为N的字符串,求它的第K小子串是什么。Input第一行是一个仅由小写英文字母构成的字符串S第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个。T=1则表示不同位置的相同子串算作多个。N<=500000题目分析:后缀自动机神奇的性质。。不同位置的算多个,那么除了根节点每个点代表其终点集合个串。不同位置的算一个,那么除了根节点每个点代表一个串(...原创 2019-04-01 11:26:00 · 136 阅读 · 0 评论 -
BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡【广义后缀自动机】
题目传送门题目分析:这道题就是求多个串的不同子串的个数。广义后缀自动机,就是可以表示所有串的所有后缀的自动机。其实就是建完一个串之后,把另一个串接在初始节点后面建就好了。看完这句话的第一反应?点分治!不是度数不超过20,是叶子数不超过20。。。所以从每个叶子跑一个SAM,把它们合并起来变成一个大SAM,统计在这个大SAM上不同的子串个数。怎么统计?蒟蒻知道两种方法 :“每...原创 2019-04-01 14:52:04 · 219 阅读 · 0 评论 -
BZOJ 3172: [Tjoi2013]单词【AC自动机】
题目传送门题目分析:题意结合一下样例应该就能理解。。每个串在自动机走过的路径上的点cnt+1。fail树中子树的和就是一个点代表的串的出现次数。最后统计的时候可以直接借助建fail树时的队列,不用建边什么的。这道题后缀自动机好像也能做,把每个串放进去跑就行了。至于后缀数组反正我不会。。比较一下还是AC自动机好打一些。Code:#include<cstdio>#incl...原创 2019-04-01 15:53:56 · 126 阅读 · 0 评论 -
BZOJ 2946: [Poi2000]公共串【后缀自动机/后缀数组】
题面:给出几个由小写字母构成的单词,求它们最长的公共子串的长度。文件的第一行是整数 n,1<=n<=5,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。题目分析:后缀数组做法:将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,按照height值将后缀分成若干组,判断每组的后缀是否包...原创 2019-04-01 16:58:17 · 204 阅读 · 0 评论 -
BZOJ 3238: [Ahoi2013]差异【后缀数组+单调栈】
题面:题目分析:前面的∑lenTi+lenTj=n∗(n+1)/2∗(n−1)\sum lenTi+lenTj = n*(n+1)/2 * (n-1)∑lenTi+lenTj=n∗(n+1)/2∗(n−1)考虑后面怎么求。(对网上的后缀树做法略表懵逼。。虽然懂原理但是理解并不深刻。 )只需要把后缀数组中的height值拿来乱搞。两个排名分别为i,j的后缀,它们的LCP就是height[...原创 2019-04-01 19:45:37 · 155 阅读 · 1 评论 -
NOIP模拟赛 魔王降临(2) 洪流【区间最大字典序子串】
题目描述:给定一个长度为N的字符串s和M个询问, 每次询问一个区间[l, r]的最大字典序子串。输出共M行, 第i行输出一个整数, 表示你的答案子串的起始位置。1 ≤ N,M ≤ 200000题目分析:首先,区间最大字典序子串一定是一段后缀。我们把询问离线,按右端点从小到大排序,然后从左到右扫,扫到位置ppp,就回答r=pr=pr=p的询问。对于一个固定的右端点,随着左端点的增加,答...原创 2019-07-11 20:41:54 · 249 阅读 · 0 评论 -
BZOJ 3881: [Coci2015]Divljak 【AC自动机fail树】
题面:Alice有n个字符串S1,S2...SnS_1,S_2...S_nS1,S2...Sn,Bob有一个字符串集合T,一开始集合是空的。接下来会发生q个操作,操作有两种形式:“1 P”,Bob往自己的集合里添加了一个字符串P。“2 x”,Alice询问Bob,集合T中有多少个字符串包含串SxS_xSx。(我们称串A包含串B,当且仅当B是A的子串)1 <= n,q <...原创 2019-03-31 09:12:55 · 164 阅读 · 0 评论