t3题目穿送门
#include<bits/stdc++.h>
using namespace std;
char s[1000001];
void int_nxt()
{
int j=-1;
nxt[0]=-1;
for (int i=1;i<m;i++)
{
while (j>=0 && s[j+1]!=s[i])j=nxt[j];
if (s[j+1]==s[i])j++;
nxt[i]=j;
}
}
int main()
{
while (1)
{
cin>>s;
m=strlen(s);
if (m==1 && s[0]=='.')break;
int_nxt();
if (len%(m-nxt[m])==0)
{
printf("%d",len/(m-nxt[m]));
}
else
{
printf("1");
}
}
}
如果不理解,可以到UVA10298
看题解,里面写得很详细。