文章中的string a需要换成char a[10000]
原因是string a的速度太慢,导致超时的事情发生
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
using namespace std;
int next1[100005];
void get_next(string b,int len)
{
int i=0;
int j=-1;
next1[0]=-1;
while(i<len)
{
if(j==-1||b[i]==b[j])
{
++i;
++j;
next1[i]=j;
if(i>=2&&j>=1)
{
if(i%(i-next1[i])==0)
{
int k=i/(i-next1[i]);
printf ("%d %d\n",i,k);
}
}
}
else
{
j=next1[j];
}
}
}
int main()
{
string a;
int n;
int k=1;
while(scanf("%d",&n),n)
{
getchar();
getline(cin,a);
printf ("Test case #%d\n",k++);
get_next(a,n);
printf ("\n");
}
return 0;
}
参考文献:
https://www.cnblogs.com/qq-star/p/3888641.html
https://www.cnblogs.com/chenxiwenruo/p/3546457.html
http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html
https://www.cnblogs.com/qq-star/p/3888641.html