poj2406 Power Strings
【题意】
字符串从头开始最多有多少个重复片段
【分析】
求出nxt数组,看总长度是不是最长能重复多少的倍数,如果是则说明有循环节,总长度处于循环节长度即可
如果不能整除说明循环节只有几个
【代码】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e6+5; char s[maxn]; int nxt[maxn]; int main() { freopen("a.in","r",stdin); freopen("a.out","w",stdout); while(scanf("%s",s) && s[0]!='.') { int len=strlen(s); nxt[0]=-1; int j=0,k=-1; while(j<len) { if(k==-1 || s[j]==s[k]) { j++; k++; nxt[j]=k; } else k=nxt[k]; } int ans=1; if(len%(len-nxt[len])==0) ans=len/(len-nxt[len]); printf("%d\n",ans); } return 0; }