poj上不去,在百炼上搜的,都是同一道题,只是百炼上是中文,以后要多在百炼刷题了。
描述
给定两个字符串a和b,我们定义a*b为他们的连接。例如,如果a=”abc” 而b=”def”, 则a*b=”abcdef”。 如果我们将连接考虑成乘法,一个非负整数的乘方将用一种通常的方式定义:a^0=””(空字符串),a^(n+1)=a*(a^n)。
abcd aaaa ababab .
1 4 3
Waterloo local 2002.07.01
挺好的一道题,今天学的kmp感觉智商不够,妥妥的不够,
感觉理解不了,附个ac代码吧,虽理解不了,但是已经记住了。
#include<stdio.h>
#include<string.h>
#define N 1000005
char c[N];
int p[N];
int len;
void getp()
{
int i=0;
int j=-1;
p[i]=j;
while(i<len)
{
if(j==-1||c[i]==c[j])
{
i++;j++;
p[i]=j;
}
else
j=p[j];
}
}
int main()
{
while(scanf("%s",c)&&c[0]!='.')
{
len=strlen(c);
getp();
//for(int i=0;i<=len;i++)
// printf("+++%d ",p[i]);
//printf("\n");
if(len%(len-p[len])==0)
printf("%d\n",len/(len-p[len]));
else
printf("%d\n",1);
}
return 0;
}