您的位置:首页 > 其它

POJ 2406 Power Strings(KMP找周期)

2015-02-21 21:38 357 查看
大概意思是给定字符串是多少个周期组成.....

前面的题目已经知道最小周期就是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: