poj 2406(kmp)
来源:互联网 发布:php shorttime 编辑:程序博客网 时间:2024/05/17 23:14
kmp 模板:
#include<iostream>#include<string.h>#include<cstdio>int next[100];void getnext(char b[]){int i=1,j=0; //i是每个位子,j是回退的位子next[1]=0;while(i<=strlen(b)){if(j==0||b[i-1]==b[j-1]){i++;j++;next[i]=j;}else j=next[j]; //用上一个的 回退关系}}int kmp(char a[],char b[]){int i=1,j=1; //i是主串中的位子 ,j匹配串的位子while(i<=strlen(a)&&j<=strlen(b)){if(j==0||a[i-1]==b[j-1]){i++;j++;}else j=next[j];}if(j>strlen(b))return i-strlen(b);else return 0;}int main(){char a[40],b[40];printf("要匹配的主串:\n");scanf("%s",a);printf("要匹配的子串:\n");scanf("%s",b);getnext(b);printf("输出next值:\n");for(int i=1;i<=strlen(b);i++)printf("%d ",next[i]);printf("\n");printf("%d\n",kmp(a,b));main();return 0;}
poj 2406
这个题就是用KMP算法的next数组求最小重复子串长度;
对于代码中i-next[i]代表了字符串最小前缀且满足能不但的复制得到
原字符串;len%(i-next[i])==0时代表字符串刚刚是子串的整数倍;
源码:#include <iostream>#include <memory.h>using namespace std;int len;int next[1000005];char s[1000005];int kmp_next(){ int i=0,j=-1; next[0]=-1; while(i<len) { if(j==-1||s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; } int x=i-next[i]; if(len%x==0) return x; else return len;}int main(){ while(1) { memset(s,'\0',sizeof(s)); cin>>s; if(s[0] == '.') break; len = strlen(s); int ans = kmp_next(); ans = len/ans; cout<<ans<<endl; }}
- poj 2406(kmp)
- POJ-2406(KMP)
- POJ 2406(KMP) 证明
- poj 2406:Power Strings(KMP)
- poj 2406 power string(KMP)
- poj 2406 Power Strings(kmp算法)
- POJ 2406 Power Strings(kmp)
- POJ 题目2406 Power Strings(KMP)
- POJ 2406 Power String(KMP)
- POJ 2406 Power Strings(kmp)
- poj 2406 Power Strings (KMp)
- POJ 2406 Power Strings (KMP)
- POJ 2406 Power Strings(KMP)
- poj-2406-Power Strings(KMP)
- poj 2406 Power Strings(kmp)
- poj 2406Power Strings(KMP入门)
- poj 2406 Power Strings(KMP || 暴力)
- POJ 2406(KMP next数组性质)
- 裸机驱动与Linux设备驱动的区别
- Hibernate配置文件标签理解(更新ing)
- 项目经理杂谈(下)
- 孙鑫视频VC++深入详解学习笔记(全)
- SharePoint 2010 Ribbon with wrong style in Chrome and Safari
- poj 2406(kmp)
- apk和odex的合并,让软件成为完整的apk包以便反编译
- C++ primer 习题答案
- Stanford Algorithms: Design and Analysis, Part 1 [Final Exam]
- 使用libcurl实现获取目标文件大小, 下载进度显示, 断点续传等功能
- 互斥锁pthread_mutex_t的使用(转载)
- http://211.67.33.62/JudgeOnline/problem.php?id=1014,排序二叉树
- Linux命令
- 多重背包