kmp杂题1 poj2406 Power Strings

来源:互联网 发布:淘宝商品规格怎么填写 编辑:程序博客网 时间:2024/06/10 14:26

1.poj2406 Power Strings

题意:
我们定义两个字符串a和b的乘法: a*b ,就是把它们连接起来。比如: a = “abc” ,b = “def” ,那么 a*b = “abcdef”.由此推广,字符串的幂运算: a^0 = “” (空字符串) a^(n+1) = a*(a^n). 给一个字符串s,假设存在 a^n=s,求n的最大值。

如果这个字符串是某个串的幂运算后的值
那么他应该就是这样的
ababababababababab……
abcabcabcabc……

所以我们做一次自己匹配自己 就可以了

AC代码

#include <cstdio>#include <cstring>using namespace std;int len,p[1000010];char a[1000010];int main(){    while (scanf("%s",a+1)!=EOF)    {        if (strcmp(a+1,".")==0) break;        len=strlen(a+1);        int i,j=0;p[1]=0;        for (i=2;i<=len;i++)        {            while (j>0&&a[i]!=a[j+1]) j=p[j];            if (a[i]==a[j+1]) j++;            p[i]=j;        }        if (len%(len-p[len])==0) printf("%d\n",len/(len-p[len])); else printf("1\n");    }    return 0;}
0 0