UVa1328 - Period(KMP找最短循环节)
2013-09-16 10:56
375 查看
题目大意
给定一个长度为n的字符串,求它的每个前缀的最短循环节题解
白书例题~~~”错位部分“长度为i-f[i],
如果这个前i个字符能够组成一个周期串,那么”错位”部分刚好是一个循环节i-f[i]就是循环节长度~~~~
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAXN 1000005 int f[MAXN]; char p[MAXN]; int main() { int n,j,cases=1; while(scanf("%d",&n)!=EOF&&n) { printf("Test case #%d\n",cases++); scanf("%s",p); int len=strlen(p); f[0]=j=-1; for(int i=1;i<len;i++) { while(j>=0&&p[j+1]!=p[i]) j=f[j]; if(p[j+1]==p[i]) j++; f[i]=j; } for(int i=1;i<len;i++) if(f[i]>=0&&((i+1)%(i-f[i])==0)) printf("%d %d\n",i+1,(i+1)/(i-f[i])); printf("\n"); } return 0; }
相关文章推荐
- UVA 1328 Period(KMP:最短循环节)
- poj 1961 Period(kmp最短循环节)
- poj 1961 Period (KMP 最短循环节)
- poj 1961 Period(kmp最短循环节)
- LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)
- poj 1961 Period(KMP, 最短循环节)
- [KMP求最小循环节][HDU1358][Period]
- poj1961 Period kmp解决找字符串的最小循环节
- HDU1358 Period(KMP,找循环节)
- POJ 1961 Period(kmp循环节)
- HDU1358-Period(kmp-求前缀长度和最小循环节长度 )
- CUGB专题训练之数据结构:D - Period (kmp中的next判断循环节)
- POJ 1961 Period——kmp求最小循环节
- LA-3026 - Period-MP算法-失配函数-寻找循环节 (kmp)
- uvalive 3026 Period (前缀最短循环节)
- HDU 3746 Cyclic Nacklace(KMP,最短循环节)
- Hdu 1358 Period (KMP 求最小循环节)
- hust 1010 The Minimum Length (KMP 最短循环节)
- hdu 3746 Cyclic Nacklace(KMP 最短循环节)
- POJ 1961(KMP, 最短循环节)