题意:定义一个a*b=字符串a连接字符串b;给你一个字符串s,问你这个字符串最多能用多少个字符串t连接得到;例如:aaaa=4个a构成;
解题思路:kmp水题,next数组除了查找字串以外最广泛的一种用法,用来判定一个串是不是循环串,如果是,输出原串的长度/最小的循环节,否则,输出1就行了;
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000500
using namespace std;
int next[maxn];
char t[maxn];
int tlen;
void get_next()
{
int j=0,k=-1;next[0]=-1;
while(j<tlen)
{
if(k==-1||t[j]==t[k])
next[++j]=++k;
else
k=next[k];
}
}
int main()
{
while(gets(t))
{
tlen=strlen(t);
if(strcmp(t,".")==0)
break;
get_next();
int len=tlen-next[tlen];
if(tlen%len==0)
{
printf("%d\n",tlen/len);
}
else
{
printf("1\n");
}
//printf("%d\n",ans);
}
}