hdu1358

来源:互联网 发布:出售一审淘宝店铺 编辑:程序博客网 时间:2024/06/05 03:30
#include <iostream>#include <cstdio>#include <cstring>using namespace std;char t[1000005];int next[1000005];void get_next(int n){    int i=0;    int k=-1;    next[0]=-1;    while(i<=n)    {        if(k==-1||t[i]==t[k])            i++,k++,next[i]=k;        else            k=next[k];    }}int main(){    int n;    int o=1;    while(scanf("%d",&n),n!=0)    {        scanf("%s",t);        get_next(n);        int i;        printf("Test case #%d\n",o++);        for(i=1;i<=n;i++)        {            if(i%(i-next[i])==0&&next[i]!=0)  //i-next[i]是周期                printf("%d %d\n",i,i/(i-next[i]));        }        printf("\n");    }    return 0;}

原创粉丝点击