poj 2406 Power Strings next[]

来源:互联网 发布:淘宝封号支付宝用不了 编辑:程序博客网 时间:2024/06/05 07:33

                                                                                               Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 39125 Accepted: 16238

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



#include<cstring>#include<iostream>#include<cstdio>#include<string>using namespace std;const int maxm=1000000+20;int nex[maxm];char M[maxm];int m;void getnex(){    int j=nex[1]=0;for(int i=1;i<=m; ){while(j&&M[i]!=M[j])  j=nex[j];nex[++i]=++j;}}int main(){   while(~scanf("%s",M+1)&&strcmp(M+1,".")!=0)   {   m=strlen(M+1);   getnex();   int circle=m+1-nex[m+1];   int ans=m%circle?1:m/circle  ;   printf("%d\n",ans);      } }

0 0
原创粉丝点击