poj1961-kmp的next数组的简单应用(2)

来源:互联网 发布:java mvc模式是什么 编辑:程序博客网 时间:2024/06/05 03:38

是poj2406的升级版(上一篇解题报告),只要把遍历一遍就可以,只要注意条件改成i%(i-Next[i-1]-1)||Next[i-1]==-1就可以了,要看解释的话看上一篇就可以了:

#include<cstdio>#include<cstring>const int maxn=1e6+7;char t[maxn];int Next[maxn];int lt;void getNext(){    int i,j=-1;    Next[0]=-1;    for(int i=1;i<lt;i++){        while(j!=-1&&t[i]!=t[j+1])j=Next[j];        if(t[i]==t[j+1])j++;        Next[i]=j;    }}int main(){    int cas=0;    while(~scanf("%d",<)){        if(!lt)break;        scanf("%s",t);        getNext();        printf("Test case #%d\n",++cas);        for(int i=2;i<=lt;i++){            if(i%(i-Next[i-1]-1)||Next[i-1]==-1)continue;            else printf("%d %d\n",i,i/(i-Next[i-1]-1));        }        printf("\n");    }    return 0;}


0 0