题目描述:
给定一个字符串L,已知这个字符串是由某个字符串S重复R次而得到的,求R的最大值。
算法标签:KMP
以下代码:
#include<bits/stdc++.h> #define il inline #define _(d) while(d(isdigit(ch=getchar()))) using namespace std; const int N=1e6+5; char s[N];int ne[N],n; il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;} int main() { while(1){ scanf(" %s",s+1);n=strlen(s+1); if(s[1]=='.')break; for(int i=1;i<=n;i++)ne[i]=0; for(int i=2,j=0;i<=n;i++){ ne[1]=0; while(j&&s[i]!=s[j+1])j=ne[j]; if(s[i]==s[j+1])j++;ne[i]=j; } if(n%(n-ne[n])==0)printf("%d ",n/(n-ne[n])); else puts("1"); } return 0; }