大概意思是给定字符串是多少个周期组成.....
前面的题目已经知道最小周期就是t=m-next[m]...然后直接长度m除以t就得到结果了...
然后迅速搞定 提交WA....原来是忘记了那种情况,就HDU 3746那个题目...比如abbab...这样的就错了,所以要m%t==0的就是m/t,其他的都是1
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
char a[1002000];
int pre[1000020];//前缀数组,pre[i]代表b数组中从第i个元素开始有pre[i]个元素和开头相等
int m;
void getpre()
{
int i=0,j=-1;
pre[0]=-1;
while(i<m)
{
if(j==-1||a[i]==a[j])
pre[++i]=++j;
else
j=pre[j];
}
}
int main()
{
while(scanf("%s",a),a[0]!='.')
{
m=strlen(a);
getpre();
int t=m-pre[m];
if(m%t==0)
printf("%d\n",m/t);
else
printf("1\n");
}
return 0;
}