poj 1961 Period 把主串的每一种前缀当作小主串,如果小主串的子串在小主串中叠加次数大于1,输出小主串长度及叠加次数。
Posted can丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1961 Period 把主串的每一种前缀当作小主串,如果小主串的子串在小主串中叠加次数大于1,输出小主串长度及叠加次数。相关的知识,希望对你有一定的参考价值。
- #include<stdio.h>
- #define M 1000010
- int i,n,next[M];
- char s[M];
- void getNext()
- {
- int j=-1;
- next[0]=-1;
- for(i=1;s[i];i++){
- while(j!=-1&&s[j+1]!=s[i])j=next[j];
- if(s[j+1]==s[i])j++;
- next[i]=j;
- }
- }
- int main()
- {
- int k=0;
- while(scanf("%d",&n),n){
- scanf("%s",s);
- printf("Test case #%d\n",++k);
- getNext();
- for(i=1;i<=n;i++)
- if(i%(i-next[i-1]-1)==0&&next[i-1]>-1)
- printf("%d %d\n",i,i/(i-next[i-1]-1));
- puts("");
- }
- return 0;
- }
以上是关于poj 1961 Period 把主串的每一种前缀当作小主串,如果小主串的子串在小主串中叠加次数大于1,输出小主串长度及叠加次数。的主要内容,如果未能解决你的问题,请参考以下文章