poj 2406 power string(KMP)

来源:互联网 发布:java数组的长度单位 编辑:程序博客网 时间:2024/05/18 01:04

题目链接:点击打开链接

题目分析:利用KMP进行分析,白书上的方法略有不同

                   其实就是进行预处理,找到上一个与之匹配的

总结:数组开小了,出现re

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;int n,m,f[1000005];char s[1000005];int get_failure(int len){    memset(f,-1,sizeof(f));    int k=-1,j,i=0;    while(i<len)    {       if(k==-1||s[i]==s[k]) f[++i]=++k;       else k=f[k];    }    j=len-k;    if(len%j) return 1;    else return len/j;}int main(){    while(~scanf("%s",s))    {        int len=strlen(s);        if(s[0]=='.')        break;        else        printf("%d\n",get_failure(len));    }    return 0;}

另外附上

int get_failure(int len){    memset(f,0,sizeof(f));    int k,j,i;    for( i=1;i<len;i++)    {        k=f[i];        while(k&&s[i]!=s[k])   k=f[k];        f[i+1]=s[i]==s[k]?k+1:0;           }}


原创粉丝点击