hdu1358 Period(kmp周期)

来源:互联网 发布:黄金价格软件下载 编辑:程序博客网 时间:2024/06/09 21:41

题目链接:点击打开链接

题意描述:给一个字符串,求这个字符串中每个前缀自身是否有周期性?


解题思路:kmp即可

代码:

#include <cstdio>#include <cstring>#define MAXN 1000010using namespace std;void getNext(char* str,int len,int* next){    int i,j;    j=next[0]=-1;    i=0;    while(i<len){        while(j!=-1&&str[i]!=str[j]) j=next[j];        ++i,++j;        next[i]=j;    }}char st[MAXN];int next[MAXN];int main(){    int t=0,n;    while(++t){        scanf("%d",&n);        if(!n) break;        scanf("%s",st);        getNext(st,n,next);        printf("Test case #%d\n",t);        for(int i=2;i<=n;i++){            if((i%(i-next[i])==0)&&(i/(i-next[i])>1))                printf("%d %d\n",i,i/(i-next[i]));        }        printf("\n");    }    return 0;}


0 0