您的位置:首页 > 其它

POJ 1961 Period 还是next数组的含义、

2016-03-24 22:11 66 查看
题意:求所给串的前缀(包括原串)中有多少循环串(子串长度至少要是周期的两倍)

思路:还是next数组的应用问题、如果不懂next数组的话

/article/6215424.html

点上面传送门

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
const int qq=1000000+10;
char node[qq];
int next[qq];
int len;
void getnext()
{
int i,j;
i=0;j=-1;
next[0]=-1;
while(i<len){
if(j==-1||node[i]==node[j])
next[++i]=++j;
else
j=next[j];
}
return;
}
int main()
{
int t=1;
while(~scanf("%d",&len)&&len){
scanf("%s",node);
printf("Test case #%d\n",t++);
getnext();
for(int i=2;i<=len;++i)
if(i%(i-next[i])==0&&next[i]!=0)
printf("%d %d\n",i,i/(i-next[i]));
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: