pku 2406 Power Strings(KMP next数组应用)
#include <stdio.h>
#include <string.h>
#define MAXN 1000005
char str[MAXN];
int next[MAXN];
void getNext(int len)
{
int j=0,k=-1;
next[0]=-1;
while(j<len)
{
if( k == -1 || str[j] == str[k] )
{
++j;
++k;
next[j] = k;
}
else k=next[k];
}
}
int main()
{
int len,t;
while(scanf("%s",str))
{
if(str[0]=='.') break;
len=strlen(str);
getNext(len);
// for(j=0;j<=len;j++) printf("%d ",next[j]);
// printf("\n");
t = len / ( len - next[len] );
if( t != 1 && t*( len - next[len] ) == len )
{
printf("%d\n",t);
}
else printf("1\n");
}
return 0;
}
浙公网安备 33010602011771号