UVA 1328 Period(KMP)

来源:互联网 发布:java并发编程实战.mobi 编辑:程序博客网 时间:2024/05/16 19:47
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ss(x) scanf("%d",&x)const int maxn=1000000+5;char s[maxn];int n,f[maxn];int main(){    int kase=0;    while(true)    {        ss(n);if(n==0) break;        scanf("%s",s);        f[0]=0;f[1]=0;        rep(i,1,n-1){            int j=f[i];            while(j&&s[i]!=s[j]) j=f[j];            f[i+1]=(s[i]==s[j])?j+1:0;        }        printf("Test case #%d\n",++kase);        rep(i,2,n){            if(f[i]>0&&i%(i-f[i])==0) printf("%d %d\n",i,i/(i-f[i]));        }        printf("\n");    }    return 0;}

0 0
原创粉丝点击