http://poj.org/problem?id=2406
睡前一水~ 一看就覺得是KMP的next數組...
然後果然是
#include <cstdio>
#include <cstring>
#include <iostream>
#define max 1000010
int n[max];
char str1[max];
int next(char s[])
{
n[0]=-1;
int j=0,k=-1;
int len=strlen(s);
while(j<len)
{
if(k==-1||s[j]==s[k])
n[++j]=++k;
else k=n[k];
}
j=len-k;
if(len%j==0)
return len/j;
else
return 1;
}
int main()
{
while(~scanf("%s",&str1))
{
if(str1[0]=='.')
break;
printf("%d\n", next(str1));
}
return 0;
}