HDU 1358 Period 求前缀长度和最小循环节长度
2013-08-09 16:19
120 查看
题意:求该字符串(前面一部分)存在循环的最小循环节是多少,输出所有满足该条件的 前缀长度和最小循环节长度
#include <stdio.h> char P[1000010];//从0开始存 int f[1000010];//记录P的自我匹配 int Len; void getFail(){ int m=Len; f[0]=f[1]=0; for(int i=1;i<m;i++){ int j=f[i]; while(j&&P[i]!=P[j])j=f[j]; f[i+1]= P[i]==P[j] ? j+1 : 0; } } int main(){ int Case=1; while(scanf("%d",&Len),Len){ scanf("%s",P); getFail(); printf("Test case #%d\n",Case++); for(int i=2;i<=Len;i++) if(f[i]>0 && i% (i-f[i])==0) printf("%d %d\n",i,i/(i-f[i])); printf("\n"); } return 0; }
相关文章推荐
- hdu 1358 Period 最小循环节
- HDU1358-Period(kmp-求前缀长度和最小循环节长度 )
- (KMP 1.5)hdu 1358 Period(使用next数组来求最小循环节——求到第i个字符的循环节数)
- hdu 1358 Period 最小循环节
- poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】
- HDU 1358 Period (next跳表找最小循环节)KMP
- HDU1358——Period(KMP求最小循环节)
- HDU 1358 Period(最小循环节)
- hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
- Hdu 1358 Period (KMP 求最小循环节)
- HDU-1358 Period 字符串问题 KMP算法 求最小循环节
- KMP + 求最小循环节 --- HDU 1358 Period
- HDU-1358 Period(最小循环节)
- KMP + 求最小循环节 --- HDU 1358 Period
- hdu_1358Period(kmp找循环前缀)
- [KMP-循环节问题]HDU 1358 period
- hdu 3746 kmp求最小循环节长度
- HDU - 1358 Period KMP循环节出现次数
- HDU 1358 Period [KMP+循环节]
- HDU 1358 (所有前缀中的周期串) Period