Processing math: 100%

随笔分类 -  字符串

摘要:题意: 给出n个字符串siq个询问: l,r,kri=lcount(i,k),其中count(i,j)表示sj作为子串在si中出现的次数 分析: 先不考虑查询中l,r的限制,考虑该字符串sk在一个字符串集合中出现 阅读全文
posted @ 2017-12-06 19:14 AOQNRMGYXLMV 阅读(442) 评论(0) 推荐(0) 编辑
摘要:忘了当时怎么做的了,先把代码贴上,保存一下后缀数组模板。 阅读全文
posted @ 2017-12-05 20:42 AOQNRMGYXLMV 阅读(337) 评论(0) 推荐(0) 编辑
摘要:题意: "题目链接" 给出n个字符串,求有多少对(i,j),ij使得sisj拼起来是回文串 分析: 设si,sj的长度分别为Li,Lj,一共有如下三种情况: Li=Lj,那么有si等于sj的反串,si,sj构成回文串,注 阅读全文
posted @ 2017-03-24 21:21 AOQNRMGYXLMV 阅读(229) 评论(0) 推荐(0) 编辑
摘要:将所有后缀按照字典序排序后,每新加进来一个后缀,它将产生n - sa[i]个前缀。这里和小罗论文里边有点不太一样。height[i]为和字典序前一个的LCP,所以还要减去,最终累计n - sa[i] - height[i]即可。 1 #include 2 #include 3 #include ... 阅读全文
posted @ 2015-04-24 09:23 AOQNRMGYXLMV 阅读(199) 评论(0) 推荐(0) 编辑
摘要:用一个特殊字符将两个字符串连接起来,然后找最大的height,而且要求这两个相邻的后缀的第一个字符不能在同一个字符串中。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 200000 +... 阅读全文
posted @ 2015-04-23 22:34 AOQNRMGYXLMV 阅读(176) 评论(0) 推荐(0) 编辑
摘要:找重复次数最多的字串,如果有多解,要求字典序最小。我也是跟着罗穗骞菊苣的论文才刷这道题的。首先还是枚举一个循环节的长度L,如果它出现两次的话,一定会包含s[0], s[L], s[2L]这些相邻两个之间。然后枚举相邻的两个,尽可能的向前和向后延伸,假设延伸长度为k,则重复次数为k / L + 1向后... 阅读全文
posted @ 2015-04-23 21:34 AOQNRMGYXLMV 阅读(185) 评论(0) 推荐(0) 编辑
摘要:这道题和UVa 12206一样,求至少重复出现k次的最长字串。首先还是二分最长字串的长度len,然后以len为边界对height数组分段,如果有一段包含超过k个后缀则符合要求。 1 #include 2 #include 3 #include 4 using namespace std; 5 ... 阅读全文
posted @ 2015-04-22 19:01 AOQNRMGYXLMV 阅读(115) 评论(0) 推荐(0) 编辑
摘要:体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇。也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = ... 阅读全文
posted @ 2015-04-22 12:00 AOQNRMGYXLMV 阅读(302) 评论(0) 推荐(0) 编辑
摘要:拖了好久的题解,想想还是补一下吧。A. King of Thieves直接枚举起点和5个点之间的间距,进行判断即可。 1 #include 2 using namespace std; 3 4 char s[110]; 5 6 int main() 7 { 8 //freopen("i... 阅读全文
posted @ 2015-04-15 13:42 AOQNRMGYXLMV 阅读(179) 评论(0) 推荐(0) 编辑
摘要:A. Minimum Difficulty题意:有一个递增序列a,现在要去掉除了第一项和最后一项元素外的某一项,使新数列中相邻元素之差的最大值最小。分析:先求出原序列a中,相邻两项元素之差的最大值m。枚举去掉ai,则新序列相邻元素差的最大值为max{ m, ai+1 - ai },然后记录最小值即可... 阅读全文
posted @ 2014-12-18 04:48 AOQNRMGYXLMV 阅读(164) 评论(0) 推荐(0) 编辑
摘要:直接上传送门好了,我觉得他分析得非常透彻。http://972169909-qq-com.iteye.com/blog/1114968 1 #include 2 #include 3 4 const int maxn = 200000 + 10; 5 const int MOD = 10007... 阅读全文
posted @ 2014-11-30 19:56 AOQNRMGYXLMV 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题意:有两个字符串,找一个最长子串是的该串既是第一个字的前缀,又是第二个串的后缀。分析:把两个串并起来然后在中间加一个无关字符,求next数组即可。 1 #include 2 #include 3 4 const int maxn = 50000 + 10; 5 char s1[maxn * ... 阅读全文
posted @ 2014-11-26 18:12 AOQNRMGYXLMV 阅读(143) 评论(0) 推荐(1) 编辑
摘要:题意:找出这些串中最长的公共子串(长度≥3),如果长度相同输出字典序最小的那个。分析:用库函数strstr直接查找就好了,用KMP反而是杀鸡用牛刀。 1 #include 2 #include 3 4 char a[15][70], sub[70]; 5 int p[70], l; 6 7 ... 阅读全文
posted @ 2014-11-26 17:02 AOQNRMGYXLMV 阅读(421) 评论(0) 推荐(0) 编辑
摘要:题意:求一个字符串的相同前缀后缀的所有可能的长度,这里该字符串其本身也算自己的前缀和后缀。分析:我们知道next数组的性质是,该字符之前的字符串的最大相同前缀后缀。既然知道了最大的,即next[len]。递归一次next[ next[len] ],就能求得更小的前缀。不断的递归把所有所有可能的长度找... 阅读全文
posted @ 2014-11-21 09:25 AOQNRMGYXLMV 阅读(215) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个字符串,在所有长度大于1的前缀中,求所有的周期至少为2的周期串,并输出一个周期的长度以及周期的次数。分析:有了上一题 HDU 3746 的铺垫,这道题就很容易解决了把next求出来,然后逐个判断即可。 1 #include 2 #include 3 4 const int max... 阅读全文
posted @ 2014-11-20 20:21 AOQNRMGYXLMV 阅读(719) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个字符串,要求在后面添加最少的字符是的新串是循环的,且至少有两个循环节。输出最少需要添加字符的个数。分析:假设所给字符串为p[0...l-1],其长度为l有这样一个结论:这个串的最小循环节为 l - next[l]感觉自己想得不是特别透彻,所以把别人的博客贴上来吧。里面有个小错误就是:n... 阅读全文
posted @ 2014-11-20 19:23 AOQNRMGYXLMV 阅读(233) 评论(0) 推荐(0) 编辑
摘要:题意:用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案。分析:毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少。和上一题 HDU 1686 不同,两个图案肯定不能在母串中有交叉的部分,所以当匹配成功一次后,应当滑动整个模式串的长度。和上一题比,代码几乎不变,只... 阅读全文
posted @ 2014-11-20 03:41 AOQNRMGYXLMV 阅读(217) 评论(0) 推荐(0) 编辑
摘要:题意:求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分。分析:一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去。后来仔细想想,完全不用,直接让模式串向前滑动,即 j = next[j] 1 #include 2 #include 3 #include 4 ... 阅读全文
posted @ 2014-11-20 03:19 AOQNRMGYXLMV 阅读(220) 评论(0) 推荐(0) 编辑
摘要:题意:用第二个数列去匹配第一个数列,输出第一次匹配到的位置,如果没有则输出-1.分析:这明显是一道裸的KMP。我是在这篇博客上学的KMP算法的,讲得比较透彻。http://blog.csdn.net/v_july_v/article/details/7041827 1 #include 2 #in... 阅读全文
posted @ 2014-11-20 02:20 AOQNRMGYXLMV 阅读(159) 评论(0) 推荐(0) 编辑
摘要:最近审题老是一错再错,Orz题目中说求一个Hamming值总和最小的字符串,而不是从所给字符中找一个最小的这样的话,我们逐列处理,所求字符串当前位置的字符应该是该列中出现次数最多其次ASCII值最小的代码有点挫了,if语句太多了 1 //#define LOCAL 2 #include 3 #in... 阅读全文
posted @ 2014-08-28 17:59 AOQNRMGYXLMV 阅读(129) 评论(0) 推荐(0) 编辑

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