poj2402 kmp算法

来源:互联网 发布:vs1003怎么连接单片机 编辑:程序博客网 时间:2024/05/16 07:54

终于自己的思路过了一道题。。。。。

#include<iostream>#include<cstdio>#include<string>]#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>using namespace std;#define ll __int64#define rep(i,n) for(i=0; i<(n); i++) #define reph(i,n,m) for(i=(n); i<=(m); i++)//正循环的#define repd(i,n,m) for(i=(n); i>=(m); i--) //负循环的 #define fab(a) (a)>0?(a):0-(a)#define arc(a) (a)*(a)#define inf 10000000   //最大值的#define exp 0.0000001     //浮点型的#define N 10000010char s[N];int next[N];int main(){    int i,j,len;    while(scanf("%s",s))    {            if(s[0]=='.')              break;            len=strlen(s);            i=0;            j=-1;            next[i]=-1;            for(;i<len;)            {                        if(j==-1 || s[i]==s[j])                        {                                 i++;                                 j++;                                 next[i]=j;                        }                        else                        j=next[j];            }    //       rep(i,len+1)   //         printf("%d\n",next[i]);            i=len-next[len];            if(len%i==0)            printf("%d\n",len/i);            else            printf("1\n");  /*          for(i=2; i<=len/2; i++)            {                     if(len%(i-next[i]))            }*/    }    return 0;}


 

原创粉丝点击