http://poj.org/problem?id=1961

(1)题意:给定一个长度为n的字符串,求他的前缀且前缀满足本身为周期字符串。例:aabaabaab 长度为9 周期为3

(2)用到kmp

他人具体代码:

View Code
#include <cstdio>
#include <iostream>
#include <cstring>
#define maxn 1000004
using namespace std;

int next[maxn];

void GetNext(char *s)
{
    int len = strlen(s);
    int i,j;
    i = 0; j = -1;
    next[0] = -1;
    for (i = 1; i < len; ++i)
    {
        while (j > -1 && s[j + 1] != s[i])
        j = next[j];
        if (s[j + 1] == s[i]) ++j;
        next[i] = j;
    }
}
int main()
{
    int n,i;
    char s1[maxn];
    int cas = 1;
    while (~scanf("%d",&n))
    {
        if (!n) break;
        printf("Test case #%d\n",cas++);
        scanf("%s",s1);
        GetNext(s1);
        for (i = 0; i < n; ++i)
        {
            int d = (i + 1)%(i - next[i]);
            if (d == 0 && next[i] != -1)
            {
                printf("%d %d\n",i + 1,(i + 1)/(i - next[i]));
            }
        }
        printf("\n");
    }
    return 0;
}