kmp
文章平均质量分 61
李祖林
这个作者很懒,什么都没留下…
展开
-
hdu 4763 Theme Section
题意:给你一个字符串,问你能否找到三个子串(首,中间部分,尾)相等,如果可以输出最长的子串长度! 解法:kmp,首尾相同的情况下,找中间部分看是否有,用首子串作匹配串,中间部分为文本串!! #include #include #include int next[1000005]; char str[1000005]; int n; void mn() {原创 2016-07-15 10:31:39 · 196 阅读 · 0 评论 -
hdu 1358 Period
题意:求前缀周期,如果前缀有周期输出前缀长度及周期,没有就不用输出! 解法:构造next数组; #include #include int next[1000005],n; char str[1000005]; void mn() { next[0]=-1; int k=-1,j=0; while(j<n) {原创 2016-07-12 14:28:44 · 189 阅读 · 0 评论 -
hdu 4300 Clairewd’s message
题意:首先给你一个a-z的转换表,然后给你给一个密文+明文的串(明文可能不完整),密文一定完整,所以取原串的一半,前半段一定是密文,保存后半段,然后对原串翻译,在用后半段与翻译后的串匹配记录最后匹配的位置,然后用总长度减去记录的那个位置就是要输出的部分。 解法:kmp的应用; #include #include int next[100005],n,m; void mn(char *原创 2016-07-12 10:46:41 · 178 阅读 · 0 评论 -
hdu 4333 Revolving Digits
扩展kmp,先把原串翻一倍,然后构造原串的next数组,通过原串和原串翻倍的串构造extend数组,需要注意的是还要计算原串翻倍的串的循环节不然会超时!最后附上大神yefeng1627的扩展kmp的详细讲解及模板的博客(http://www.cnblogs.com/yefeng1627/archive/2012/12/24/2830979.html); #include #include i原创 2016-07-12 10:12:48 · 273 阅读 · 0 评论 -
hdu 1686 Oulipo
kmp裸题!!!用cin输入超时!!该用scanf就过了!! #include #include #include #include using namespace std; int n,m; int next1[10005]; char s[1000005],ss[10005]; void mn() { for(int k=0,i=1;i<m;i++) {原创 2016-07-07 10:14:43 · 198 阅读 · 0 评论 -
bnuoj 50394 Censor
kmp变形,只要记录每次删完后的位置,然后通过存放位置的数组回溯到那个位置即可!! #include #include #include #include using namespace std; int n,m,j,p[5000005]; int next1[5000005]; char a[5000005],s[5000005],ss[5000005]; void mn()原创 2016-07-07 09:58:33 · 671 阅读 · 0 评论 -
hdu 2203 亲和串
/*用空间换取时间,把文本串复制一份在匹配就是要的答案!!*/#include #include #include #include using namespace std; int n,m; int next1[5000005]; string s,ss; void mn() { for(int k=0,i=1;i<m;i++) { whi原创 2016-07-07 09:47:44 · 142 阅读 · 0 评论 -
hdu 2087 剪花布条
看了c_cloud的【经典算法】——KMP,深入讲解next数组的求解:http://www.cnblogs.com/c-cloud/p/3224788.html,谢谢大牛的博客,使我对kmp有了更深的了解。。。 #include #include void makeNext(const char P[],int next[]) { int q,k; int m=str原创 2016-06-23 20:38:48 · 232 阅读 · 0 评论 -
hdu 3746 Cyclic Nacklace
题意:求最小周期缺少几个补几个,不缺输出0。 解法:直接构造next数组! #include #include #include #include #include int next[120000]; int main() { int T; scanf("%d",&T); while(T--) { char str[120000]; scanf("%s",str);原创 2016-07-19 09:31:07 · 174 阅读 · 0 评论