题目链接:http://codeforces.com/contest/432/problem/D

题意:对一个长度不超过10^5的字符串。按长度输出和后缀全然匹配的的前缀的长度,及该前缀在整个串中出现的次数。(可重叠)

#include <cstdio>
#include <cstring> const int N=100005; char str[N];
int next[N],cnt[N],ansp[N],ansn[N],n; void getNext (char s[],int len)
{
next[0]=-1;
int i=0,j=-1;
while (i<len)
{
if (j==-1 || s[i]==s[j])
next[++i]=++j;
else j=next[j];
}
} void KMP ()
{
int i=0,j=0;
while (i<n)
if (j == -1 || str[i] == str[j])
i++,j++,cnt[j]++;
else
j=next[j]; for (i=n;i>0;i--) //统计每一个前缀出现次数,cnt[i]表示长度为i的前缀出现了cnt[i]次
if (next[i] != -1)
cnt[next[i]] += cnt[i];
} int main ()
{
scanf("%s",str);
n=strlen(str);
memset(cnt,0,sizeof(cnt));
getNext(str,n);
KMP();
int t=n,sum=0;
while (t) //前缀匹配后缀
{
ansp[sum]=t;
ansn[sum++]=cnt[t]; //
t=next[t];
}
printf("%d\n",sum);
for (int i=sum-1;i>=0;i--)
printf("%d %d\n",ansp[i],ansn[i]);
return 0;
}

最新文章

  1. C#中的问号
  2. [LeetCode][Java]Triangle@LeetCode
  3. 《你必须知道的.NET》读书笔记:从Hello World认识IL
  4. 编译原理(简单自动词法分析器LEX)
  5. javascript - DOM对象控制HTML元素详解
  6. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
  7. Sqli-labs less 28
  8. Ogre Addon之Paged Geometry
  9. makefile教程网址
  10. Java基础知识强化之集合框架笔记26:LinkedList的特有功能
  11. android 接听和挂断实现方式
  12. mysql用户和权限管理
  13. LightOJ 1338 &amp;&amp; 1387 - Setu &amp;&amp; LightOJ 1433 &amp;&amp; CodeForces 246B(水题)
  14. poj 2965
  15. MEF初体验之三:Exports声明
  16. 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
  17. 一张脑图说清 Nginx 的主流程
  18. Github: 从github上拉取别人的源码,并推送到自己的github仓库
  19. python之log
  20. Go语言规格说明书 之 通道类型(Channel types)

热门文章

  1. border:none与border:0的区别
  2. Android项目实战(四十四):浅谈Postman (网络请求调试插件)
  3. Android控件postDelayed用法,View自带的定时器
  4. IHttpHandler的学习(0)
  5. &lt;Sicily&gt; Longest Common Subsequence
  6. Linux下安装使用MySQL
  7. [转载]CentOS 7虚拟机下设置固定IP详解
  8. vuex 闲置状态重置方案
  9. CSU 1364 Interview RMQ
  10. Apache CXF实战之二 集成Sping与Web容器