#include <iostream>
#include <string>
#include <algorithm>
#define MAXN 400005
using namespace std; char _m[MAXN];
int next[MAXN];
void give_next(int len);
int ans_len[MAXN];
int ans_len_index;
int ans[MAXN];
bool take_judge(int b,int len);
int main()
{
//freopen("acm.acm","r",stdin);
string s;
int i;
int j;
int len;
int index;
int cur;
//int ans;
while(getline(cin,s))
{
if(s.length() == )
{
break;
}
index = ;
//cout<<s<<endl;
//ans = 0;
//cout<<s<<endl;
for(i = ; i < s.length(); ++ i)
{
_m[i] = s[i];
}
memset(next,-,sizeof(next));
give_next(s.length()); i = s.length();
//cout<<i<<" ";
ans[index ++] = i;
for(; next[i] != ; i = next[i])
{
//cout<<next[i]<<" ";
ans[index++] = next[i];
}
for(i = index-; i >= ; -- i)
{
cout<<ans[i]<<" ";
}
cout<<ans[i]<<endl;
//cout<<endl;
// cout<<endl;
}
return ;
} bool take_judge(int b,int len)
{
int j = ;
int i;
for(i = b; i < len; ++ i,++ j)
{
if(_m[i] != _m[j])
{
break;
}
}
if(i == len)
{
return true;
}
return false;
} void give_next(int len) //此为求next 数组的方法。
{
int i;
int j;
i = ;
j = -;
next[] = -;
while(i < len)
{
if(j == - || _m[i] == _m[j])
{
i ++;
j ++;
next[i] = j;
}
else
j = next[j];
}
}

最新文章

  1. 转:C/C++程序员简历模板
  2. BIOS MCSDK 2.0 学习笔记(一)
  3. CSS常用样式及示例
  4. bootstrap-datepicker使用
  5. javascript_core_05之正则表达式
  6. 广州APP开发外包公司哪家比较好?广州达到信息技术有限公司技术到底怎么样?
  7. java自定义标签 权限
  8. 利用Aspose.Cell控件导入Excel非强类型的数据
  9. ASP.NET MVC 表单的几种提交方式
  10. 从51跳cortex-m0学习2——程序详解
  11. 大一C语言结课设计之《简单计算器》
  12. DDL 和DML 区别
  13. jackson xml转对象 对象转xml
  14. vue-cli模拟后台数据交互
  15. TestNG Suite 运行出现中文乱码如何解决
  16. 如何在VB.net中建立word文档
  17. Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)
  18. Flink &ndash; SlotSharingGroup
  19. python连接MongoDB(有密码有认证)
  20. 3d的 一些公式

热门文章

  1. sqlserver2008查询性能优化(文摘)
  2. SQL中的split方法的使用
  3. excel2007vba绘图1
  4. 微信小程序两种滑动方式
  5. matlab中的结构体
  6. MySQL 安装与使用(三)
  7. #define 和typedef
  8. web-day9
  9. set_error_handler
  10. hdu 1874 畅通工程 【spfa and dijkstra实现】