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
",m/(m-next[m]));
33         else printf("1
");
34     }
35     return 0;
36 }
View Code
随便写写。一点学习心得。。。--如果本文章没有注明转载则为原创文章,可以随意复制发表,但请注明出处与作者
原文地址:https://www.cnblogs.com/ganhang-acm/p/4060539.html