HDU1358.cpp(KMP学习)

来源:互联网 发布:js 元素属性赋值 编辑:程序博客网 时间:2024/05/15 07:35
/*字符串长度为n,那么n-next[n](字符串从0开始)是最小循环节,    如果n能整除n-next[n],周期为n/(n-next[n]);*/#include<stdio.h>#include<string.h>#define size 1000002int n;char s[size];int next[size];int temp;void getnext(){        int i,j;        next[0]=-1;        i=0;j=-1;        while(i<=n)        {                if(j==-1 || s[i]==s[j])                        i++,j++,next[i]=j;                else                        j=next[j];        }}int main(){        int T=1;        while(~scanf("%d",&n)&&n)        {                getchar();                scanf("%s",s);                getnext();                printf("Test case #%d\n",T++);                for(int i=0;i<n;i++)                {                        temp=i+1-next[i+1];                        if(i==0)continue;                        if((i+1)%temp==0&&i+1>temp)                        {                               printf("%d %d\n",i+1,(i+1)/temp);                        }                }                printf("\n");        }        return 0;}


原创粉丝点击