poj 2406:字符串乘方

来源:互联网 发布:java打包jar工具 编辑:程序博客网 时间:2024/06/05 01:52

2406:字符串乘方

    总时间限制: 
    3000ms 
    内存限制: 
    65536kB
    描述

    给定两个字符串ab,我们定义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
    样例输入
    abcdaaaaababab.
    样例输出
    143
    提示
    本问题输入量很大,请用scanf代替cin,从而避免超时。

    #include<stdio.h>#include<string.h>#define N 1000000char 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;}elsej=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]));elseprintf("1\n");}return 0;}