![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
沙雕.
此人很帅,什么都没有写
展开
-
SPOJ-LCS2 Longest Common Substring II (后缀自动机)
题目链接:https://www.spoj.com/problems/LCS2/en/解题思路:对于两个串的LCS,我们只需对其中一个建sam,另一个在上面跑,记录最大值即可。对于多个串的话,我们需要记录每个串跑sam的时候在每个节点的相同子串取最大值,每次跑完更新一下每个节点当前所有串的最长相同子串取最小值。需要注意的是失配时跳fa数组的时候也需要更新fa节点的数据。代码:...原创 2019-08-23 12:20:08 · 124 阅读 · 0 评论 -
字符串算法的一些总结
已学习最小表示法功能:1.O(N)求一个串的所有循环同构串中字典序 最小/最大 的那个串的起点在原串中的位置KMP功能:1.O(N)求每个前缀的最长相同前后缀2.O(N+M)进行模式串在匹配串中的查找3.O(N)判断当前字符串是否循环,若循环则len%(len-fail[len]) = 04.O(N)求当前字符串的最小循环节len-fail[len]不管当前是否...原创 2019-08-05 23:18:05 · 180 阅读 · 0 评论 -
HDU2019多校第二场 1009(HDU 6599) I Love Palindrome String(回文树(自动机)+manacher)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6599解题思路:回文自动机求每个本质不同的子串出现的次数,同时记录每个节点i代表的回文串第一次出现的起点终点。然后对原串跑一遍马拉车然后遍历一遍每个节点代表的回文串(最多 有 字符串长度 个本质不同的回文)枚举每个起点终点,用马拉车判断前一半是否回文,累加答案即可。回文树的代码来...原创 2019-07-28 16:09:31 · 109 阅读 · 0 评论 -
hihoCoder 1602 本质不同的回文子串的数量(manacher+hash)
题目链接:http://hihocoder.com/problemset/problem/1602解题思路:跑马拉车的时候,对于单个字母单独考虑,然后匹配过程中,我们不管开始匹配未知位置之前的(代码74行),因为那一部分回文已经被统计过了,我们只需统计未匹配过的(代码77行),这其中可能有部分之前出现过,我们用哈希表去重一下。如何利用哈希表去重?https://blog.csdn.ne...原创 2019-07-28 15:25:01 · 378 阅读 · 0 评论 -
最low的哈希写法以及用哈希表去重
字符串hash写法:①构造对于一个串shash[1] = s[0]hash[2] = (hash[0]*P + s[1])%Q...hash[len] = (hash[len-2]*P+s[len-1])%Q这样构造即可.P取一个比最大字符ASCII码大一点的质数(311好像挺常用)Q取一个超大的质数(一般用unsigned long long自动对2^64-1...原创 2019-07-28 15:24:21 · 631 阅读 · 0 评论 -
HDU 5394 Trie in Tina Town(用回文树找字典树中回文串总数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5394大家最喜欢看到的东西:WA:试试这组数据Input5a 0b 1b 2a 3a 2Output14RE(爆栈):看题目下面提示,手动加栈后记得用C++提交RE(越界):看看有没有把根节点(没有字符)加入回文树解题思路:塞进回文树的每次都是一条从...原创 2019-08-01 16:27:24 · 139 阅读 · 0 评论 -
URAL 2040 Palindromes and Super Abilities 2(回文树)
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=2040解题思路:卡空间,把板子里的s数组改成char或者unsighed short卡时间,用快读,输出用putchar好抠的题。代码:#include<cstdio>#include<algorithm>#include<cst...原创 2019-08-05 15:23:10 · 124 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring(后缀数组+ST)
题目链接:http://poj.org/problem?id=3693解题思路:从论文滚来做这题的-->https://wenku.baidu.com/view/5b886b1ea76e58fafab00374.html理解大概是这样:(蓝字应该是循环两次,好像写错了,抱歉)然后我们算出来的当前的答案不一定是这一组的最优解。如 xbcabcab 这组数据(来自POJ...原创 2019-07-23 10:29:30 · 157 阅读 · 0 评论 -
HDU 4426 Palindromic Substring(回文树+哈希)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4426WA:1.k有没有 long long2.回文串是取前一半解题思路:利用回文树获取本质不同的回文串的数量以及他们回文串前一半第一次出现的位置(起点终点位置)。我们搞一个结构体:记录上面的信息,同时还需要一个变量计算hash值对于每一次询问,我们O(N)预处理整个串的ha...原创 2019-08-04 16:54:58 · 110 阅读 · 0 评论 -
2019牛客多校第六场 C Palindrome Mouse (回文树)
题目链接:https://ac.nowcoder.com/acm/contest/886/C解题思路:想到类似dp的思路,用cnt[fa]记录父节点不包括自身的回文子串总数,那么当前的总数可以分为3部分cnt[now] = cnt[fa] + 1(父节点本身) + 当前在父节点串两边新添加的的字母后现在的串能够产生的新的回文串前两部分没有什么问题,注意cnt[0] 和 cn...原创 2019-08-04 14:11:08 · 109 阅读 · 0 评论 -
UVALive 7041 The Problem to Slow Down You(回文树)
题目链接:https://vjudge.net/problem/UVALive-7041WA:相乘爆long longRE:新加入特殊间隔符的特殊间隔符号越界了解题思路:让两个字符串共用同一棵回文树,加完第一个串之后在两者之间加一个不会出现的字符,防止产生两个字符串之间的回文串。然后就跟原本只有一个串时cnt的统计差不多,现在分成两部分,第一个字符串的字符计入cntl,第二个计...原创 2019-08-03 19:40:01 · 85 阅读 · 0 评论 -
回文树功能
len[]:当前节点代表的回文串长度num[]:当前节点代表的回文后缀种类+1(自己)cnt[]:当前节点代表的回文串的数目p:当前节点总数①统计一个字符串本质不同回文串种类,统计每种回文串的数目(难度:*)p-2,cnt[]直接使用即可(cnt要先跑一遍回文树里的count函数,不然没有计入某些回文后缀包含当前节点回文串的数目)②统计每个前缀的最长回文后缀(难度:*)...原创 2019-08-03 16:40:40 · 107 阅读 · 0 评论 -
HDU 5421 Victor and String(回文树前段插入)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5421这题就是学一下回文树前段插入。下面这个是论文原话。因此对于我们最初的板子,我们有:改动1:原本维护上一个节点所在的回文串的节点的指针---->两个指针(重点)由于回文串最长回文前缀和后缀是一样的,所以实际上我们只需要在左右插入的时候维护两个不同的指针,左边插入的指针维...原创 2019-08-03 10:16:03 · 110 阅读 · 0 评论 -
POJ 1226 Substrings(KMP + 枚举)
题目链接:http://poj.org/problem?id=1226解题思路:枚举一个串所有子串/对应反串,与其他串匹配,求最长的 某个子串/反串 和 所有其他串 都匹配 的长度即可。代码:#include<cstdio>#include<algorithm>#include<cstring>using n...原创 2019-07-21 16:37:58 · 96 阅读 · 0 评论 -
HDU 4513 吉哥系列故事——完美队形II(manacher)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513解题思路:寻找两边向回文中心非递减的最长回文子串。manacher板子里匹配下一位的时候增加一个判断条件就行了,不仅判断两位相同,额外判断靠左的那个点右移两个位置的点是否>=当前位置。代码:#include<cstdio>#include<algor...原创 2019-07-21 16:32:13 · 90 阅读 · 0 评论 -
ZOJ 3430 Detect the Virus(AC自动机,你WA疯了就进来瞧瞧.)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430WA:1.每个串只记一次,不要记多次2.忽略等号不转码直接跑AC自动机会错,例子:转码前:1aGVs1aGhlbA==ans = 0--------------转码后:1hel1hhelans = 13.ch...原创 2019-08-08 14:21:25 · 93 阅读 · 0 评论 -
POJ 3415 Common Substrings(后缀数组+单调队列)
题目链接:http://poj.org/problem?id=3415后缀数组论文链接:https://wenku.baidu.com/view/5b886b1ea76e58fafab00374.html解题思路:求不小于k的最长公共子串的数量。①首先连接两个字符串A,B,构造后缀和height数组,我们按照k,将height>=k的分在一起,属于这一堆内的后缀,只有可能...原创 2019-07-28 20:54:10 · 88 阅读 · 0 评论 -
HDU 3247 Resource Archiver(AC自动机+BFS+状压DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3247参考博客:https://www.cnblogs.com/kuangbin/p/3164106.html 不能处理的数据:2 111 001100也不知道这种病毒串是否合法,我觉得应该不会出现这种病毒串,不然压缩原本字符串的过程中间还得添几个其他的字符也算不上是压缩了。各...原创 2019-08-18 13:22:44 · 155 阅读 · 0 评论 -
HDU 2296 Ring (AC自动机+DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2296解题思路:给出n个串和串的价值,询问长度为L的串最多能拥有的价值,并输出价值最大的串中长度最小中字典序最小的串。AC自动机的作用是跑到最长相同后缀对应的单词前缀处使得最快到达下一个单词DP:定义: dp[i][j]表示长度为i,且第i个字母对应AC自动机节...原创 2019-08-13 09:46:36 · 117 阅读 · 0 评论 -
HDU 2825 Wireless Password(AC自动机+状压DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2825解题思路:给出n个串,询问至少包含其中k个串的长度为L的串的种类AC自动机的作用就是为了枚举当前节点的所有自节点时找到最优的位置使得尽快到达单词结尾,以及到达某一节点时获得自己以及所有后缀链接的所有到达的单词末尾的所有情况(构造时直接处理)状压DP:用k表示状态。eg. k...原创 2019-08-12 20:38:44 · 105 阅读 · 0 评论 -
SPOJ - SUBLEX Lexicographical Substring Search(后缀自动机)
题目传送门解题思路:多组输入会RE(坑爹玩意儿)后缀自动机上可以跑子串,因此每一位我们都按照a~z的取,这样可以使字典序尽量小。怎样才能找到第k小的呢?DFS预处理每个节点包括自己共可形成多少子串,记为cnt[]。注意记忆化,不然GG(复杂度大概从O(26^2N)->O(2N))然后逼近即可,我们保证k小于等于当前子树大小,找到当前根的26个子节点中,第一个使得前po...原创 2019-08-25 19:49:10 · 90 阅读 · 0 评论 -
SPOJ LCS:LCS - Longest Common Substring(后缀自动机)
题目链接:https://www.spoj.com/problems/LCS/en/解题思路:数据量和时间限制摆明了准备卡掉O(N*logN)的求法,后缀自动机可以O(N)解决讲解后缀自动机的博客(易懂):https://www.luogu.org/blog/Kesdiael3/hou-zhui-zi-dong-ji-yang-xie讲解后缀自动机的PPT(高深):https://...原创 2019-08-21 14:12:23 · 117 阅读 · 0 评论 -
SPOJ - NSUBSTR Substrings(后缀自动机)
题目传送门解题思路:题意是求一个串各个长度的子串的可重叠最大重复出现次数。①首先我们肯定能想到构造后缀自动机的时候每加入一个新的字符新产生的子串长度一定是跟当前节点有关。用cnt[]记录每个节点的串出现的次数,在一个个添加字符的时候,每次在这个新产生的后缀节点+1,我们知道如果这个节点没有对应符合要求的父节点的话还会再产生一个新的节点,那个节点不用记,因为那个节点也属于当前节点的后缀,...原创 2019-08-24 19:10:28 · 164 阅读 · 0 评论 -
POJ 1625 Censored!(AC自动机+高精度+DP(因为矩阵会T))
题目链接:http://poj.org/problem?id=1625RE:爆charWA:还是爆char解题思路:思路和POJ2778是一样的:https://blog.csdn.net/weixin_43768644/article/details/99050540但是这题矩阵快速幂会T设字符种类为M,串长度为L,病毒串总节点数N矩阵快速幂复杂度O(N^3*logL...原创 2019-08-11 21:57:02 · 96 阅读 · 0 评论 -
HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243WA:1.单词的总数 = 26+26^2+26^3+......+26^L,而不是26^L2.使用等比数列求和公式求单词总数:(26^(L+1)-26)/25,出现除法取模导致错误,这个25在模(2^64)下逆元我不会求.做这题肯定做过POJ2778了吧POJ 2778利用矩阵...原创 2019-08-11 14:45:52 · 97 阅读 · 0 评论 -
POJ 2778 DNA Sequence(AC自动机+矩阵快速幂)
题目链接:http://poj.org/problem?id=2778TLE:1.计算矩阵大小请根据具体具体节点数,直接按最大矩阵算会超时2.取模操作在每一行完成之后再做解题思路:我们首先要知道矩阵快速幂可以应用于这样一个场景:询问一个有n个节点的图,从节点x走k步到节点y有多少种方法?构造n*n的矩阵,把所有的边都加到矩阵,比如(i,j)有两条边,a[i][j] =2...原创 2019-08-10 09:56:27 · 115 阅读 · 0 评论 -
ZOJ 3228 Searching the String(AC自动机)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3228解题思路:给出一个长串,询问很多个模式串在这个长串中可重叠最大重复次数以及不可重叠最大重复次数。首先KMP虽然处理可重叠和不可重叠很方便(不可重叠的情况完全匹配后j指针归0即可),但是无奈长串太长,模式串太多,所以肯定会T成狗那么还是用AC自动...原创 2019-08-13 20:47:18 · 106 阅读 · 0 评论 -
HDU 2457 DNA repair(AC自动机+DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2457解题思路:给出n个病毒串,一个基因串,询问基因串中最少修改多少个字符可以获得不包含任何一个病毒的串。AC自动机用于 判断当前节点枚举子节点时候后缀是否会形成病毒串DP的思路:定义:dp[i][j]表示长度为i,终点在j节点的最小修改次数初始化:dp[0][0] =...原创 2019-08-13 20:28:14 · 84 阅读 · 0 评论 -
AC自动机
参考博客:https://www.cnblogs.com/sclbgw7/p/9260756.html目录一、例题二、联系KMP思考AC自动机的构建三、AC自动机匹配时跳fail边的优化四、AC自动机对于单词节点计数时跳fail边的优化一、例题给出n个模式串,一个匹配串,询问有几个模式串出现在匹配串中二、联系KMP思考AC自动机的构建对于上面的问题我们如何用KM...原创 2019-08-06 19:00:32 · 125 阅读 · 0 评论 -
HYSBZ 2160 拉拉队排练(回文树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2160解题思路:回文树统计本质不同回文串长度,数目,降序排序后遍历。快速幂加快乘积运算,然后碰到长度1就不用乘了。注意本题只要奇数长度回文串。代码:#include<cstdio>#include<algorithm>#include&...原创 2019-08-02 14:55:40 · 74 阅读 · 0 评论 -
HYSBZ 2565 最长双回文串(回文树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2565容易WA的数据:InputabccbaOutput5解题思路:利用回文树在插入字符的时候可以得知当前插入字符的最长回文后缀,我们用一个数组记录这个当前字符做结尾的后缀,正着跑一遍得到最长后缀,反着跑一遍相当于得到最长前缀,然后相邻前后缀相加的最大值就是...原创 2019-08-02 09:26:03 · 110 阅读 · 0 评论 -
HDU 1671 Phone List(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671解题思路:当前插入字典树的串在没查完之前遇到了字典树的一个单词的结束节点或者插入完成后字典树下一个节点还不是空的那么就不合题意。后者还可以理解为整个插入过程没有生成新的节点。#include<cstdio>#include<algorithm>#inc...原创 2019-07-21 16:27:27 · 76 阅读 · 0 评论 -
POJ 1743 Musical Theme(后缀数组)
题目链接:http://poj.org/problem?id=1743解题思路:后缀数组的论文:https://wenku.baidu.com/view/5b886b1ea76e58fafab00374.html大牛的论文18页给出了该类题型的解决办法。就是二分答案P,然后我们找到一块块每个height值都大于等于P的区间[l,r],这个区间内的任意两个后缀的LCP都>=P...原创 2019-07-21 16:19:05 · 76 阅读 · 0 评论 -
POJ 3080 Blue Jeans(暴力/kmp/exkmp/sam)
题目链接:http://poj.org/problem?id=3080解题思路:找给出的n个串中最长相同部分,长度相同就选择字典序最小的。①暴力法抠出第一个串所有子串排序,第一关键字为长度,第二关键字为字典序让长度更长,字典序更小的排前面然后暴力在其他几个串中找有无这个子串,都存在就直接输出这个。(1)可以使用string.find(子串),未找到返回string::n...原创 2019-07-03 09:01:39 · 138 阅读 · 0 评论 -
HDU 1867 A + B for you again (水·KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1867解题思路:KMP求可以去掉的最长循环节。正反都要,优先取短的,其次取字典序小的代码:#include<cstdio>#include<cstring>#include<algorithm>#define ll long long#inclu...原创 2019-07-01 22:31:35 · 72 阅读 · 0 评论 -
HDU 2594 Simpsons’ Hidden Talents(KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594解题思路:两个字符串拼接起来,求 小于等于拼接前较小单个字符串长度 的 最长相同前后缀代码:#include<cstdio>#include<algorithm>#include<cstring>using namespa...原创 2019-06-21 19:24:33 · 110 阅读 · 0 评论 -
HDU 3746 Cyclic Nacklace (KMP补齐最小循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746解题思路:结论:最小循环节长度为len-fail[len]len表示字符串长度,字符串的下标0~len-1,fail[len]表示0~len-1的最长相同前后缀①对于2*fail[len]<=len的情况显然成立,且要补足的为len-fail[n]②如果大于2*fail[...原创 2019-06-17 11:13:12 · 161 阅读 · 0 评论 -
POJ 2406 Power Strings(KMP)
题目链接:http://poj.org/problem?id=2406解题思路:题目的意思是寻找给出的字符串的最小循环节对应的循环次数利用KMP的性质,若0~i是循环的,那么fail[i+1]=循环节长度*(循环次数-1)参考 https://blog.csdn.net/weixin_43768644/article/details/90108511代码:#inclu...原创 2019-06-14 11:10:14 · 112 阅读 · 0 评论 -
POJ 3461 Oulipo(KMP模板题)
题目链接:http://poj.org/problem?id=3461解题思路:裸KMP。可以参考 ---> https://blog.csdn.net/weixin_43768644/article/details/90034165代码:#include<cstdio>#include<cstring>#include<algor...原创 2019-06-14 10:42:10 · 112 阅读 · 0 评论 -
洛谷 3808 【模板】AC自动机(简单版)
题目链接:https://www.luogu.org/problemnew/show/P3808学模板可以参考这篇博客:https://blog.csdn.net/weixin_43768644/article/details/98605417新手の代码:#include<cstdio>#include<cstring>#include<queue&...原创 2019-05-22 23:45:37 · 124 阅读 · 0 评论