首页 > 代码库 > poj2406 Power Strings

poj2406 Power Strings

Power Strings
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 33273 Accepted: 13825

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

143

Hint

This problem has huge input, use scanf instead of cin to avoid time limit exceed.

Source

Waterloo local 2002.07.01
 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6  7 int next[1000010],m; 8 char s[1000010]; 9 10 void get_next()11 {12     int i=0,j=-1;13     next[0]=-1;14     while(i<m)15     {16         if(j==-1||s[i]==s[j])17         {18             i++;19             j++;20             next[i]=j;21         }22         else j=next[j];23     }24 }25 int main()26 {27     while(scanf("%s",s)!=EOF)28     {29         if(s[0]==.)break;30         m=strlen(s);31         get_next();32         if(m%(m-next[m])==0)printf("%d\n",m/(m-next[m]));33         else printf("1\n");34     }35     return 0;36 }
View Code

 

poj2406 Power Strings