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