思路
安利博客嗯嗯——TJH的博客
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int next[1000010],longs;
char s[1000100];
int main()
{
scanf("%s",s+1);
longs=strlen(s+1);
while(s[1]!='.')
{
int k=0;
for(int i=2; i<=longs; i++)
{
while(k>0&&s[k+1]!=s[i])
k=next[k];
if(s[k+1]==s[i])
k++;
next[i]=k;
}
if(longs%(longs-(next[longs]))==0)
printf("%d\n",longs/(longs-(next[longs])));
else
printf("1\n");
scanf("%s",s+1);
longs=strlen(s+1);
}
return 0;
}