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

abcd

aaaa

ababab

.

Sample Output

1

4

3

Hint

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

Source

 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

 

你可能感兴趣的:(String)