您的位置:首页 > 其它

Power Strings

2015-08-07 15:56 169 查看
Time Limit: 3000MSMemory Limit: 65536K
Total Submissions: 37439Accepted: 15467
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

唉,太气人了,数组刚开始开小了。
开成char a[1000000];应该再大一些。

[code]

#include<stdio.h>
#include<string.h>
char a[1000100];
//int len;
char p[1000100];
int kmp()
{
int i,j,len;
i=0,j=-1;
p[0]=-1;
len=strlen(a);
while(i<len)
{
if(j==-1||a[i]==a[j])
{
i++;j++;
//printf("%d ",j);
p[i]=j;
}
else j=p[j];
//	printf("%d\n",j);
}
i=len-j;
if(len%i==0)
{
return len/i;
}
return 1;
}
int main()
{
int c;
while(scanf("%s",a)&&a[0]!='.')
{
c=kmp();
printf("%d\n",c);
}
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: