z-box
Fizzmy
这个作者很懒,什么都没留下…
展开
-
Codeforces 535D Tavas and Malekas-字符串匹配
传送门题意:给出文本串的长度n,给出模式串以及模式串在文本串中出现的位置,求有多少种文本串满足条件。Solution:在文本串中暴力加入模式串,最后判断匹配位置是否和给出的相符即可。代码(z-box赛高!):#include<cstdio>#include<iostream>#include<cstring>using ...原创 2018-02-04 15:58:02 · 462 阅读 · 0 评论 -
Codeforces 631D Messenger-字符串匹配
传送门题意:给出两个分别为n,m项的字符串求第二个字符串在第一个中出现几次字符串按照(li,ci)(li,ci)(l_i,c_i)的形式给出(如2-a 2-b 1-c 表示aabbc)n,m<=2e5 l<=1e6n,m<=2e5 l<=1e6n,m...原创 2018-02-04 16:14:42 · 398 阅读 · 0 评论 -
学习笔记——z-box算法
简介z-box算法可用于普通KMP、扩展KMP,国外非常流行但是国内却几乎没有人用,这种算法在解决许多字符串问题时都比KMP要直观许多。算法详解对于一个字符串s,设它的长度为lenz[i]所表示的是s[i…len-1]与s[0…len-1]的最长公共前缀如何求出z[i]数组?递推即可对于一个新的i,我们把i前面的所有z[j]看成一个区间[j,z[j]],记录右端点最...原创 2018-02-04 18:59:38 · 1159 阅读 · 0 评论 -
Codeforces 126B Password- z-box算法
传送门题意:给出一个字符串,求不等于前后缀的最长的一段子串,使得这段子串即是前缀也是后缀Solution:这道题如果使用KMP解决并不这么直观使用z算法可以轻松地解决(如果没有学过z算法请点击这里)处理出z数组后,我们记录前i项的z的最大值对于第i+1项,如果z[i+1]+i==len&&max[i]>=z[i+1],即从i+1开始能匹配到...原创 2018-02-04 15:37:01 · 302 阅读 · 0 评论 -
Codeforces 149E Martian Strings-字符串匹配
传送门题意:给出一个长度为n的文本串和m个模式串,求有多少个模式串可以拆成两半,使得这两半按顺序匹配(n<=2e5,m<=100)Solution:先正着跑一遍KMP,pos[i]表示模式串中最早能匹配到第i个字符的位置然后把文本串和模式串都取反,再跑一遍KMP,求出文本串的每个位置i所能匹配的最长的模式串长度z[i],设模式串长为len,那么我们只需要...原创 2018-02-04 16:48:06 · 370 阅读 · 0 评论 -
Codeforces gym 100792B Banana Brain's Bracelet - z-box算法
传送门题意:给一个循环串A,和一个字符串C,求一个最长的A的子串B,使得将B首尾相接成一个循环串后,C是B的子串。Solution:我们把A翻倍拼接,就可以消掉”A是循环串”z这个限制,发现C可以拆成一个前缀和一个后缀我们可以求出翻转前的z数组z1以及翻转后的z数组z2,分别表示了C在每个位置可以匹配到的前缀和后缀设C的长度为len,对于每个长度为i的前缀,我们对于...原创 2018-02-04 21:32:57 · 425 阅读 · 0 评论 -
Codeforces 30E Tricky and Clever Password-字符串匹配
传送门题意:密码是一个长度为奇数的回文串,现在我们对这个密码进行加密:把密码分成 3 段,最前面的 X 个字符为一段,最后面的 X 个字符为一段,剩余的字符为一段。这三段依次称之为 prefix, suffix, middle 。middle 的长度为一个大于 0 的奇数, prefix 、 suffix 的长度相等。加密后的密码即为 A + prefix + B + middle +...原创 2018-02-07 14:39:40 · 472 阅读 · 0 评论