2406:字符串乘方
- 总时间限制:
- 3000ms
- 内存限制:
- 65536kB
- 描述
-
给定两个字符串a和b,我们定义a*b为他们的连接。例如,如果a=”abc” 而b=”def”, 则a*b=”abcdef”。 如果我们将连接考虑成乘法,一个非负整数的乘方将用一种通常的方式定义:a^0=””(空字符串),a^(n+1)=a*(a^n)。
- 输入
- 每一个测试样例是一行可打印的字符作为输入,用s表示。s的长度至少为1,且不会超过一百万。最后的测试样例后面将是一个点号作为一行。
- 输出
- 对于每一个s,你应该打印最大的n,使得存在一个a,让s=a^n
- 样例输入
-
abcd aaaa ababab .
- 样例输出
-
1 4 3
- 提示
- 本问题输入量很大,请用scanf代替cin,从而避免超时。
-
-
#include<stdio.h> #include<string.h> #define N 1000000 char c[N]; int next[N]; int len; void getnext() { int i=0; int j=-1; next[0]=-1; while(i<len)//多算一位 { if(j==-1||c[i]==c[j]) { i++;j++; next[i]=j; } else j=next[j]; } } int main() { while(scanf("%s",c)&&c[0]!='.') { len=strlen(c); getnext(); if(len%(len-next[len])==0) printf("%d\n",len/(len-next[len])); else printf("1\n"); } return 0; }