POJ 1961 Period

来源:互联网 发布:任我行 联通网络 编辑:程序博客网 时间:2024/04/28 07:29

KMP的第一题,以前数据结构课上学过KMP,现在对其实现和其中一些规律加深了理解

#include<stdio.h>char s[1000005];int next[1000005];int n;void get_next(){    int i,j;    j=next[0]=-1;    i=0;    while(i<n){        while(j!=-1 && s[j]!=s[i]) j=next[j];        next[++i]=++j;    }}int main(){    #ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);    #endif // ONLINE_JUDGE    int cas=0;    while(scanf("%d",&n),n){        printf("Test case #%d\n",++cas);        scanf("%s",s);        get_next();        int j;        for(int i=2;i<=n;i++){//这里的i是表长度,不是指针            j=i-next[i];            if(i%j==0&&i/j>1) printf("%d %d\n",i,i/j);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击