KMPnext数组循环节理解 HDU1358
Posted 相儒以沫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMPnext数组循环节理解 HDU1358相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int next1[1000010]; int m; char b[1000010]; void build_next() { int i=0; int j=-1; next1[0]=-1; while(i<m) { while(j!=-1&&b[i]!=b[j]) { j=next1[j]; } next1[++i]=++j; } } int main() { int num=1; while(scanf("%d",&m)!=EOF) { if(m==0) break; scanf("%s",&b); cout<<"Test case #"<<num<<endl; num++; build_next(); for(int i=2;i<=m;i++) { if(next1[i]==0) continue; int jie=i-next1[i]; if(i%jie==0) { cout<<i<<" "<<(i/jie)<<endl; } } cout<<endl; } return 0; }
以上是关于KMPnext数组循环节理解 HDU1358的主要内容,如果未能解决你的问题,请参考以下文章
HDU-1358 Period 字符串问题 KMP算法 求最小循环节