hdu1358 循环节
2013-03-16 19:12
120 查看
题意:给定一个字符串,求该串长度为i的前缀的最大循环周期(前提是该前缀是循环串)。
#include<stdio.h> #define N 1000005 char s ; int next ,n; void getnext() { int i,j; next[0]=0; for(i=1,j=0;i<n;i++) { while(j>0&&s[i]!=s[j]) j=next[j-1]; if(s[i]==s[j]) j++; next[i]=j; } } int main() { int i,Case; Case=0; while(scanf("%d",&n),n) { printf("Test case #%d\n",++Case); scanf("%s",s); getnext(); for(i=2;i<=n;i++) { if(i%(i-next[i-1])==0&&i/(i-next[i-1])>1) { printf("%d %d\n",i,i/(i-next[i-1])); } } printf("\n"); } return 0; }
相关文章推荐
- HDU 1358 Period [KMP+循环节]
- hdu 1358 & hdu 3746 & poj 2406 & uva 12012 循环节与kmp
- HDU 1358 Period (next跳表找最小循环节)KMP
- HDU 1358 Period(kmp循环节)
- hdu 1358 Period(KMP循环节)
- hdu 1358 KMP循环节
- HDU 1358 Period 求前缀长度和最小循环节长度
- HDu 1358 Period(Next 数组找循环节)
- hdu 1358 Period 最小循环节
- [KMP-循环节问题]HDU 1358 period
- (KMP 1.5)hdu 1358 Period(使用next数组来求最小循环节——求到第i个字符的循环节数)
- hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
- HDU - 1358 Period KMP循环节出现次数
- Hdu 1358 Period (KMP 求最小循环节)
- hdu 1358 Period(KMP 循环节)
- hdu 1358 Period 最小循环节
- HDU 1358 && HDU 3746 && POJ 2406 最小循环节 (KMP)
- HDU1358 Period(KMP,找循环节)
- HDU-1358 Period(最小循环节)
- 【KMP(循环节)】poj 2406 Power Strings(外:hdu 1358 Period)