传送门 http://poj.org/problem?id=2406
题目就是求循环了几次。
记得如果每循环输出为1.。。。
#include<cstdio>
#include<cstring>
const int MAXN=1000000+10;
char P[MAXN];
int f[MAXN];
int n,m;
void getFail()
{
int i,j;
f[0]=f[1]=0;
for(i=1;i<n;i++)
{
j=f[i];
while(j && P[i]!=P[j])
j=f[j];
if(P[i]==P[j])
j++;
f[i+1]=j;
}
}
int main()
{
while(scanf("%s",P))
{
if(P[0]=='.')
break;
n=strlen(P);
getFail();
int min_period=n-f[n];
if(n % min_period!=0)
printf("1\n"); //这是1不是0啊。。。。。。T T
else
printf("%d\n",n / min_period);
}
}

本文探讨了一种求解字符串循环次数的算法实现过程,包括预处理阶段的失败函数构造和循环次数计算逻辑,适用于字符串匹配和模式识别等场景。
652

被折叠的 条评论
为什么被折叠?



