pku 1961 Period(KMP next数组应用)

//188MS
#include <stdio.h>

#define MAXN 1000005

char str[MAXN];
int next[MAXN];

void getNext(int len)
{
    int j=0,k=-1;
    next[0]=-1;
    while(j<len)
    {
        if( k == -1 || str[j] == str[k] )
        {
            ++j;
            ++k;
            next[j] = k;
            int t = ( j ) / ( j - k );
            if( t != 1 && t*(j-k) == j) printf("%d %d\n",j,t);
        }
        else k=next[k];
    }
}

int main()
{
    int len,cas=1;
    while(scanf("%d",&len),len)
    {
        scanf("%s",str);
        printf("Test case #%d\n",cas++);
        getNext(len);
        printf("\n");
    }
}

posted @ 2010-08-27 14:21  菜到不得鸟  阅读(132)  评论(0)    收藏  举报