传送门 http://poj.org/problem?id=2406
题目就是求循环了几次。
记得如果每循环输出为1.。。。
#include<cstdio>
#include<cstring>
const int MAXN=1000000+10;
char P[MAXN];
int f[MAXN];
int n,m;
void getFail()
{
int i,j;
f[0]=f[1]=0;
for(i=1;i<n;i++)
{
j=f[i];
while(j && P[i]!=P[j])
j=f[j];
if(P[i]==P[j])
j++;
f[i+1]=j;
}
}
int main()
{
while(scanf("%s",P))
{
if(P[0]=='.')
break;
n=strlen(P);
getFail();
int min_period=n-f[n];
if(n % min_period!=0)
printf("1\n"); //这是1不是0啊。。。。。。T T
else
printf("%d\n",n / min_period);
}
}