kmp杂题1 poj2406 Power Strings

    xiaoxiao2021-03-25  150

    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; }
    转载请注明原文地址: https://ju.6miu.com/read-2130.html

    最新回复(0)