标签:
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 16679 | Accepted: 8466 |
Description
Input
Output
Sample Input
ababcababababcabab
aaaaa
Sample Output
2 4 9 18
1 2 3 4 5
Source
普通的KMP
答案是从小到大输出,所以需要用栈存一下
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const int mxn=450000; 9 char s[mxn]; 10 int next[mxn]; 11 int st[mxn]; 12 int main(){ 13 int i,j; 14 while(scanf("%s",s+1)!=EOF){ 15 memset(st,0,sizeof st); 16 int len=strlen(s+1); 17 j=0; 18 for(i=2;i<=len;i++){ 19 while(j && s[j+1]!=s[i])j=next[j]; 20 if(s[j+1]==s[i])j++; 21 next[i]=j; 22 } 23 int top=0; 24 for(i=len;i;i=next[i]){ 25 st[++top]=i; 26 } 27 while(top){ 28 printf("%d ",st[top--]); 29 } 30 printf("\n"); 31 } 32 return 0; 33 }
POJ 2752 Seek the Name, Seek the Fame
标签:
原文地址:http://www.cnblogs.com/SilverNebula/p/5677438.html