字符串
文章平均质量分 80
kopyh
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU-4763 Theme Section
题目: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题意: 一首歌有一个主题部分,就是在开头,结尾和中间都出现的一段歌词,现在给出k首歌的歌词,找出每首歌的主题部分长度。 思路: 就是求最长子段是前缀,后缀和中间出现,并且不重叠。 既是前缀又是后缀,那就明显是kmp的next数组可以直接求得,next[len]的值就是了。 再就是要找原创 2015-08-26 21:16:16 · 439 阅读 · 0 评论 -
Lightoj-1334 Genes in DNA(kmp)
题目: http://lightoj.com/volume_showproblem.php?problem=1334 题意: 给出一个母串和一个匹配串,求匹配串的所有的前后缀组合在母串中有多少个子串与之相同。前后缀长度不能超过len-1。 思路: 通过kmp加上一个dp[]递推数组求出母串中所有位置能够匹配匹配串的几个前缀,然后倒置求出能够匹配的后缀数,把所有相邻位置的前后缀匹配原创 2016-04-22 14:35:04 · 453 阅读 · 0 评论 -
Lightoj-1268 Unlucky Strings(kmp&&矩阵快速幂)
题目: http://lightoj.com/volume_showproblem.php?problem=1268 题意: 给出a个字符,求用这a个字符组成的长度为n的字符串中不包含子串s的个数。 思路: 首先知道矩阵可以解决这样一类经典问题: 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 把给定的图转为邻接矩阵,即A(i,j)原创 2016-04-18 15:43:39 · 864 阅读 · 0 评论 -
Lightoj-1258 Making Huge Palindromes(kmp||回文串)
题目: http://lightoj.com/volume_showproblem.php?problem=1258 题意: 给出一个串,求在这个串后面最少加上几个字符能够构成回文串。 思路: 可以用Manacher直接求回文串,然后找到最大的后缀回文串就是了。 也可以用kmp匹配正反串的最大匹配,前后缀最大匹配就是最长公共部分。 代码: Manacher: //kopyh原创 2016-04-16 18:41:13 · 525 阅读 · 0 评论 -
菜鸟系列——KMP
菜鸟就要老老实实重新学起: KMP 字符串kmp算法,就是前缀匹配,计算要查找的字符串的next[ ]值,就是该字符串每个位置字符匹配错误时的跳转位置,从而使字符串匹配复杂度由O(M*N)降到O(M); 下面模版将基础的计算next值的方法加了一层回滚,当该处与回滚处字符相同,则该处的next值继续向前回滚到字符不同为止; 模版: void getnext(char *pre,原创 2015-07-19 15:42:15 · 448 阅读 · 0 评论 -
Lightoj-1347 Aladdin and the Magical Lamp(后缀数组&&线段树)
题目: http://lightoj.com/volume_showproblem.php?problem=1347 题意: 求三个字符串的最长公共子串 思路: 三个字符串的总长度不超过150000所以可以用后缀数组把他们看作一个字符串来处理。 把三个字符串连接成一个字符串然后跑一遍后缀数组,按rank[]排序后找到某个区间包含三个串的子串这个区间的height[]数组的最小值就是原创 2016-04-25 21:13:15 · 528 阅读 · 0 评论 -
Lightoj-1314 Names for Babies(后缀数组)
题目: http://lightoj.com/volume_showproblem.php?problem=1314 题意: 求母串中长度在p到q之间的不相同子串的个数。 思路: 求不相同子串个数和明显用后缀数组可以搞,对于每个后缀能够取得子串个数就是min(q,n-sa[i])-max(p,height[i]+1)+1 很好理解就是能够取得的最大长度减去重复或者是最小长度,因为要去原创 2016-04-25 20:12:00 · 384 阅读 · 0 评论 -
Lightoj-1428 Melody Comparison(kmp&&后缀数组)
题目: http://lightoj.com/volume_showproblem.php?problem=1428 题意: 求母串中的不相同的并且不包含匹配串的子串个数。 思路: 求不相同子串个数和明显用后缀数组可以搞,然后处理不包含匹配串的情况只要kmp跑一遍找到所有包含的位置,然后从而确定母串中所有位置能够匹配的最远距离。 具体就是找到所有的匹配位置之后可以确定这些位置的原创 2016-04-25 18:58:32 · 451 阅读 · 0 评论 -
HDU-3613 Best Reward (Manacher)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=3613 题意: 最大价值回文串组合,要求把整个字符串拆成两个串,求可能的最大价值和。每个串只有是回文串时才会有价值,价值是这个串中所有字母的价值之和,会给出每个字母的价值。 注意必须分成两个串每个串的长度至少唯一。 思路: Manacher算法是通过对称位置快速处理回文串的方法,求出一个原创 2016-03-07 20:18:59 · 389 阅读 · 0 评论 -
HDU-2609 How many (最小表示法)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意: 给出n个0/1串,通过循环可以相同的串算一类,求一共有几类串。 思路: 暴力点写就是把所有串都变成最小表示法,然后排个序扫一遍就行了。 代码: #include #define PI acos(-1.0) #define INF 0x3f3f3f3f #define原创 2016-03-03 16:27:10 · 1276 阅读 · 0 评论 -
HDU-1358 Period (kmp)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1358 题意: 给出一段序列,求这段字符串的所有前缀中有哪些是循环串,输出这些前缀的位置和循环周期。 思路: 与hdu3746基本相同,就是利用next[]数组来求循环节长度判断是否是循环串。 代码: #include #define PI acos(-1.0) #define INF原创 2016-03-02 18:52:02 · 367 阅读 · 0 评论 -
HDU-3746 Cyclic Nacklace (kmp)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意: 给出一段序列,求这段字符串变成循环串最少还要加多少个字符。 思路: kmp的next[]数组运用,首先知道next[]数组的一般写法中存的是每个节点的失败指针,也就是与之相同的一个前缀的位置,所以next[len]存的就是这个串的前缀与后缀的最大匹配大小,所以循环节的大小也就原创 2016-03-02 18:41:11 · 339 阅读 · 0 评论 -
HDU-1686 Oulipo (kmp)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1686 题意: 找W词在T串中出现了几次。 思路: kmp模版题,构造next[]扫一遍T就行了。 代码: #include #define PI acos(-1.0) #define INF 0x3f3f3f3f #define MOD 1000000007 #define EPS 1e原创 2016-03-02 15:05:11 · 292 阅读 · 0 评论 -
POJ-3261 Milk Patterns (后缀数组 最长k次重复子串)
题目: http://poj.org/problem?id=3261 题意: 求n天牛奶质量序列中的最长k次重复子串,子串之间可重复。 思路: 标准后缀数组的模版题,利用后缀数组的height数组可以判断排名连续的k个后缀子串的前缀相同,则满足条件。 因为序列最多有2000个,所以只要对于整个序列离散化之后求后缀数组。然后二分枚举子串长度res,通过height数组扫一遍判断是否存在大原创 2016-03-01 16:20:33 · 435 阅读 · 0 评论 -
POJ-1743 Musical Theme (后缀数组 不重叠最长重复子串)
题目: http://poj.org/problem?id=1743 题意: 给出一段音符大小,求其中重复出现的最长的子串,如果一个串中的所有音符同时增大或者缩小一个数能够变成另一个串也算相同。 要求两个串不重叠且至少长度为5. 思路: 标准后缀数组的模版题,因为可以通过加减一个数达到满足情况,所以不能直接用原始数组,要求出所有相邻元素之间的差值,然后差值数组作为seq,求出后缀数原创 2016-03-01 17:14:40 · 467 阅读 · 0 评论 -
POJ-1509 Glass Beads (字符串最小表示法&后缀自动机)
题目: http://poj.org/problem?id=1509 题意: 求一个字符串的最小表示法,就是找一个循环串从哪里开始可以有最小字典序的字符串。 思路: 首先有经典的解法,通过两个指针直接对比扫一遍寻找最小表示。 同时这道题是后缀自动机的模版题,只要把字符串乘二接入后缀自动机,然后扫一遍尽可能字典序最小就行了,其实这两个方法都是贪心去找。 代码: 最小表示法: #原创 2016-03-02 13:41:46 · 449 阅读 · 0 评论 -
HDU-1711 Number Sequence (kmp)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1711 题意: 在a串中找b串的位置,没有就返回-1。 思路: kmp模版题,构造next[]扫一遍a就行了。 代码: #include #define PI acos(-1.0) #define INF 0x3f3f3f3f #define MOD 1000000007 #define原创 2016-03-02 14:36:27 · 338 阅读 · 0 评论 -
HDU5785 Interesting(回文串&&前缀和)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5787 题意: 找出所有相邻的回文串,将它们最外侧的端点坐标乘积都加起来,(i,j),(j+1,k) 两个回文串,将所有的i*k加和。 思路: 回文串直接用Manacher求解,然后对于所有的回文串都包含许多小的回文串,例如(i,j)回文串同时代表(i+1,j-1)等许多回文串,所以需要将更原创 2016-08-02 18:52:57 · 1189 阅读 · 0 评论
分享