poj2406:http://poj.org/problem?id=2406
题意:给你一个串,让你找出这个串是由哪个串循环得到,出处循环的次数。
题解;知道了KMP,用next数组直接搞定。判断ans=len%(len-next[len])==0?len/(len-next[len]):1;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 using namespace std; 6 const int N=1e7+9; 7 int f[N]; 8 char s[N]; 9 int main(){ 10 while(~scanf("%s",s)){ 11 int len=strlen(s); 12 if(len==1&&s[0]=='.')break; 13 f[0]=f[1]=0; 14 for(int i=1;i<len;i++){ 15 int j=f[i]; 16 while(j&&s[j]!=s[i])j=f[j]; 17 f[i+1]=(s[j]==s[i]?j+1:0); 18 } 19 if(len%(len-f[len])==0)printf("%d ",len/(len-f[len])); 20 else 21 printf("1 "); 22 } 23 }