Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

poj 2406 kmp

$
0
0
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e6+9;
int next[maxn];
char a[maxn];
int main()
{
    while(1)
    {
        memset(a,0,sizeof(a));
        scanf("%s",a+1);
        if(a[1]=='.') break;
        next[1]=0;
        int n=strlen(&a[1]);
        for(int i=2;i<=n;i++)
        {
            int t=i-1;
            while(t&&a[i]!=a[next[t]+1])
            t=next[t];
            next[i]=next[t]+(a[i]==a[next[t]+1]);
        }
        int ans=n-next[n];
        if(n%ans)
        printf("1\n");
        else
        printf("%d\n",n/ans);
    }
    return 0;
}


作者:yrleep 发表于2013-6-6 1:22:34 原文链接
阅读:35 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles