poj2406
题意呢,就是求有多少个循环节…
可以kmp求出next数组…然后…n-next[n]就是循环节的长度了【捂脸】 要求循环节个数..那就判断能不能除开…除的开就说明这是循环节..出不开就说明只有一个循环节…就输出1就好啦
#include <cstdio>
#include <cstring>
#define N 1100000
char str[N];
int next[N],n;
int main(){
freopen("poj2406.in","r",stdin);
while(1){
scanf("%s",str+1);
if(str[1]=='.') return 0;
next[1]=0;n=strlen(str+1);
for(int i=2,j=0;i<=n;i++){
while(j && str[i]!=str[j+1]) j=next[j];
if(str[i]==str[j+1]) j++;
next[i]=j;
}if(n%(n-next[n])==0) printf("%d\n",n/(n-next[n]));
else printf("1\n");
}
return 0;
}