libreoj10035
原题来自:POJ 2406
给定若干个长度 的字符串,询问每个字符串最多是由多少个相同的子字符串重复连接而成的。如:ababab 则最多有 个 ab 连接而成。
输入若干行,每行有一个字符串。特别的,字符串可能为 . 即一个半角句号,此时输入结束
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e6+10;
const LL mod=911451407;
char s[maxn];
int nxt[maxn];
int n;
void getnext()
{
int i=1,j=0;
nxt[1]=0;
while(i<=n+1){
if(j==0||s[i]==s[j]){
i++;
j++;
nxt[i]=j;
}
else{
j=nxt[j];
}
}
}
/*
*/
int main()
{
while(scanf("%s",s+1)){
if(s[1]=='.'&&strlen(s+1)==1){
break;
}
n=strlen(s+1);
getnext();
/* for(int i=1;i<=n+1;i++){
printf("%d ",nxt[i]);
}
printf("\n");*/
if(nxt[n+1]!=1&&n%(n-nxt[n+1]+1)==0){
printf("%d\n",n/(n-nxt[n+1]+1));
}
else{
printf("1\n");
}
}
return 0;
}