【P OJ 2406】Power Strings(KMP)

来源:互联网 发布:男朋友接吻会硬 知乎 编辑:程序博客网 时间:2024/06/08 09:52

Description

Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).

Input

Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.

Output

For each s you should print the largest n such that s = a^n for some string a.

Sample Input

abcdaaaaababab.

Sample Output

14

3

AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int len,nextt[1000005];char str[1000005];void getnext(){int i=0,j=-1;nextt[0]=-1;while(i<len){if(j==-1||str[i]==str[j]){i+=1;j+=1;nextt[i]=j;}else j=nextt[j];}}int main(){while(scanf("%s",str)!=EOF){    //int len;    //刚开始不小心在这里也定义了一个len,所以很自然的错了。 if(str[0]=='.')break;len=strlen(str);    getnext();if(len%(len-nextt[len])==0)printf("%d\n",len/(len-nextt[len]));elseprintf("1\n");}return 0;}