字符串
文章平均质量分 66
神奇豆子
这个作者很懒,什么都没留下…
展开
-
HDU 2087 剪花布条(KMPor水)
中文题目,范围很小,直接暴力即可... 用KMP的话和上一题不同之处在于这个两个子串不能有交叉... KMP: #include #include #include #include #include #include using namespace std; char a[1002000],b[10020]; int pre[10020];//前缀数组,pre[i]代表b数组中从第i个元素原创 2015-02-20 19:43:41 · 365 阅读 · 0 评论 -
SPOJ Distinct Substrings 后缀数组
求不同子串的个数有多少。 子串总数是len*(len+1)/2个,每一个子串必然是某个后缀的前缀子串..相同子串所在后缀的sa肯定是相邻的,然后基本就是height数组了... 所以就是总数-height数组和.. #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #inc原创 2016-01-27 19:32:04 · 295 阅读 · 0 评论 -
POJ 1743 Musical Theme 后缀数组+二分
有N(1 1.长度至少为5个音符 2.在乐曲中重复出现(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值。) 3.重复出现的同一主题不能有公共部分。 因为加上或者减去同一个整数差值不变,所以拿差值做后缀数组。 本题是求不可重叠子串,在论文中有提到根据height数组分组,然后判断每一组内的sa的最大值与最小值差值是否大于k,二分去做。 优化了一下模板原创 2016-01-26 20:56:41 · 270 阅读 · 0 评论 -
POJ 3261 Milk Patterns 后缀数组+二分
同样在论文中出现过的问题。至少出现k次的最长重复子串,可以重叠。 这个题要离散化一下,数据比较大... #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #include"iostream" #include"map" using na原创 2016-01-26 20:59:50 · 314 阅读 · 0 评论 -
POJ 2774 Long Long Message (后缀数组模板)
我的第一道后缀数组。后缀数组都好理解,就是计数排序那个部分没有理解太明白。 本道题是求两个串的最长公共子串。论文中有提到一个串的情况下,这时候我们把两个串拼接起来就变为论文中的一个串的情况,就是找出height数组中最大值。万一最大的两个串在都在前面或者都在后面...,所以我们加个判断,sa[i]和sa[i-1]不在一起。而且还要把两个串拼接部分加上一些非小写字母的字符分隔开,防止出错。原创 2016-01-25 22:22:54 · 271 阅读 · 0 评论 -
HDU 5442 Favorite Donut 最大最小表示法+KMP
题意:给定长度为n的字符串,字符串构成一个环,然后找出来一个位置,以这个位置开始,顺时针或者逆时针构成的字符串字典序最大,求最小的位置,如果同一位置顺逆时针都一样的话优先顺时针。 当时直接套最大最小表示法模板WA了...发现是带有循环节的地方过不去,因为处理逆时针的时候我把字符串逆置了,然后对于abcabc,逆置之后是cbacba,最大表示法求出的位置是1,在转回来是6..但是答案是逆时针的3.原创 2015-09-14 11:34:06 · 439 阅读 · 0 评论 -
hdu 2222 Keywords Search ac自动机入门
新学期新气象,暑假没学什么东西,开学了字符串部分补补姿势。 学习的更多,补题才能有得补,都不会补不动很尴尬。 入门博客自己百度了几发,对着学长给的模板自己写了一下...静态内存省时间。 感觉和KMP差不太多...起码查找都一样。 #include #include #include #include #include #include #include #include using nam原创 2015-09-02 17:22:36 · 303 阅读 · 0 评论 -
hdu 2896 病毒侵袭 ac自动机模板题
和上一道题不同的是这个题目的mark数组是标记一下到底是第几个串,因为匹配串中不同模式串个数不大于3,不过有可能相同串个数很多- -虽然我数组只开了10过了...还有就是字符的个数从26个飙升到127...所以建立字典树的时候需要做一些小的改动。查找到某个模式串标记一下,排序去重输出即可... #include #include #include #include #include #inclu原创 2015-09-02 17:53:06 · 289 阅读 · 0 评论 -
HDU 4513 吉哥系列故事——完美队形II(manacher模板)
中文题面,大概算得上模板题...不过在模板的while部分加上限制条件即可..因为是整数数组,都是正数,所以manacher模板里的#,?,\0什么的可以修改为-1 -2 -3...题目让判断回文从左到中间非递减,那么如果是以i为中心,那么b[i-1]和b[i+1]如果回文就是相等的,并且假定b[i-x]非负,那么b[i-x+2]>=b[i-x]对于所有x都符合情况。所以加上这个限制条件即可...原创 2015-04-02 20:05:24 · 451 阅读 · 0 评论 -
字符串同构最小最大表示法模板&&manacher模板
指的字典序最小或者最大的...对于某个字符串来说通过循环移位得到的就是同构.. int minmaxstring(char *s,bool bMin=true) { int i = 0, j = 1, k = 0, l = strlen(s), sub; while (i<l && j<l && k<l) { sub = s[(i+k)%l] - s[(原创 2015-04-02 09:33:07 · 367 阅读 · 0 评论 -
HDU 1686 Oulipo(KMP)
大概意思是先给出子串以及母串,让求子串在母串中有几种存在方式...意思就是这么个意思,没读题..看样例 简单KMP统计一下.. #include #include #include #include #include #include using namespace std; char a[1002000],b[10020]; int pre[10020];//前缀数组,pre[i]代表b数组原创 2015-02-20 19:38:24 · 428 阅读 · 0 评论 -
HDU 2594 Simpsons’ Hidden Talents(KMP,next数组的应用)
大概题意:给定两个字符串,求出第一个字符串的前缀和第二个字符串的后缀相同的最大长度,并且输出相同的子串... 我们只需要吧第二个串拼接到第一个串之后就变为上一题了... 不过这个题目是要注意:用上一题方法做的时候...注意答案可能会大于最短的串,那样就错了...比如abab ababab,按照上一题跑出来(没测试)是个比较大(比6大)的数字..但是答案是4...so,判断一下在这个就过了原创 2015-02-22 20:39:19 · 374 阅读 · 0 评论 -
HDU 3746 Cyclic Nacklace(KMP找循环节)
这个题是给出一个字符串,问字符串后最少补多少个字母才能使这个字符串是一个周期串....周期最少是2...周期为1就不是周期串了... 根据next数组(虽然我的数组名是pre)的值可以看出周期串的性质...在最小周期之后的周期串,next数组的值是一直增大的...然后最小周期与i的关系是t=i-next[i]...然后我们看最后一个数字后面缺多少个凑成一个周期就好了... #include #原创 2015-02-21 20:41:05 · 357 阅读 · 0 评论 -
POJ 2752 Seek the Name, Seek the Fame(KMP,next数组的应用)
题意是个起名字这么纠结的问题,总的来说是找前缀和后缀一样的都是啥..就是前缀的n个字符和后缀的n个字符相等就输出.... 然后nexr数组可以解决这个问题...,因为长度m的前缀和后缀都是原字符串,所以肯定是相等的..然后next[m]也是...一层层引申知道next[i]的值为0.. 可以找样例测试一下next数组的输出是不是... #include #include #include #原创 2015-02-22 20:13:07 · 362 阅读 · 0 评论 -
HDU 1711 Number Sequence(KMP模板)
题意不多述,下午看了半个多小时kmp总算懂了,不过明明大多数都是前缀...数组名非得开成next这么让人容易误会...所以我用了pre这个数组名。 假设pre[i]=x,则代表i之前的x个元素和从开头开始x个元素相等。 #include #include #include #include #include #include using namespace std; int a[10020原创 2015-02-20 16:26:09 · 363 阅读 · 0 评论 -
POJ 2406 Power Strings(KMP找周期)
大概意思是给定字符串是多少个周期组成..... 前面的题目已经知道最小周期就是t=m-next[m]...然后直接长度m除以t就得到结果了... 然后迅速搞定 提交WA....原来是忘记了那种情况,就HDU 3746那个题目...比如abbab...这样的就错了,所以要m%t==0的就是m/t,其他的都是1 #include #include #include #include #inclu原创 2015-02-21 21:38:10 · 354 阅读 · 0 评论 -
HDU 1358 Period(kmp循环节)
大概题意就是给定长度的字符串,找出这个字符串从开头起,循环周期大于1的所有循环子串..输出循环子串结束的位置,以及他的周期.... 周期大于1就说明最少出现过两次...上一题我们知道一个长度为i的串的最小周期是ti=i-next[i](虽然我的数组名是pre),然后判断一下ti能否整除i...能整除说明就是一个周期子串,然后当i大于最小周期t=m-next[m]之后就是每次+最小周期就好了...原创 2015-02-21 20:12:25 · 341 阅读 · 0 评论 -
hdu 3158 Boring counting 后缀数组
求给定字符串中有多少个不可重叠的重复子串。 和POJ 1743差不多,只不过那个是判定性问题可以二分求解。这个是找出来所有,那么直接枚举所有可能长度... #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #include"iostre原创 2016-01-28 19:01:26 · 318 阅读 · 0 评论