题意
求出所有前缀串的最小循环节长度
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1000005;
char p[maxn];
int f[maxn];
int main()
{
int n,cas = 1;
while(scanf("%d",&n) && n)
{
scanf("%s",p);
f[0] = f[1] = 0;
int len = strlen(p);
for(int i=1; i<len; i++)
{
int j = f[i];
while(j && p[i] != p[j]) j = f[j];
if(p[i] == p[j]) f[i+1] = j + 1;
else f[i+1] = 0;
}
printf("Test case #%d\n",cas++);
for(int i = 2; i<=len; i++)
{
int x = i - f[i];
if(f[i] && i%x == 0)
printf("%d %d\n",i,i/x);
}
printf("\n");
}
return 0;
}