反复求即可,逆序输出。
#include//1A,172MS#include #include using namespace std;int next[400002];int ans[400002];void get_next(string s){ int i=0,j=-1; int len=s.size(); next[0]=-1; while(i >s) { int num=1; int j=s.size(); get_next(s); ans[0]=j; while(next[j]>0) //反复求next[j] { ans[num++]=next[j]; j=next[j]; } for(int i=num-1;i>=0;i--) if(i!=0) printf("%d ",ans[i]); else printf("%d\n",ans[i]); } return 0;}