Seek the Name, Seek the Fame
啦啦啦,仍然是kmp
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 char s[400001]; 9 int len,next[400001],sum[400001]; 10 void get_next(int len){ 11 int i=0,j=-1; 12 next[0]=-1; 13 while(i<len){ 14 if((j==-1)||(s[i]==s[j])){ 15 i++; 16 j++; 17 next[i]=j; 18 } 19 else{ 20 j=next[j]; 21 } 22 } 23 } 24 int main(){ 25 while(scanf("%s",s)!=EOF){ 26 int k=0; 27 len=strlen(s); 28 get_next(len); 29 for(int i=len;i!=0;){ 30 sum[k++]=next[i]; 31 i=next[i]; 32 } 33 for(int i=k-2;i>=0;i--){ 34 printf("%d ",sum[i]); 35 } 36 printf("%d\n",len); 37 } 38 return 0; 39 }