传送门

题目大意:输出字符串所有前缀的循环节个数,下标从1开始,i 和1-i循环节的个数

题解:网上摘得

KMP最小循环节、循环周期:

定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。

(1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。

(2)如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(len-L)%L=L-next[len]%L,L=len-next[len]。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000009
using namespace std; int n,len; char s[N]; int nxt[N]; void getnext()
{
memset(nxt,,sizeof(nxt));
for(int i=,j=;i<=len;i++)
{
while(s[i]!=s[j+]&&j) j=nxt[j];
if(s[i]==s[j+]) nxt[i]=++j;
}
} int main()
{
while()
{
scanf("%d",&len);
if(!len) break;
scanf("%s",s+);
getnext();
cout<<"Test case #"<<++n<<endl;
for(int i=;i<=len;i++)
{
int k=i-nxt[i];
if(i!=k&&i%k==)
printf("%d %d\n",i,i/k);
}
printf("\n");
}
return ;
}

最新文章

  1. .net请求URL过长,解决方案
  2. org.artofsolving.jodconverter.office.OfficeException: failed to start and connect
  3. HTML 5 &lt;script&gt; 标签
  4. Web Api中的get传值和post传值
  5. WPF之依赖属性
  6. 一个不简单的Procedure body例子
  7. Lazy Makes Others Busy – a bad experience with DLL
  8. zoj 3761
  9. HDU 5046 Airport ( Dancing Links 反复覆盖 )
  10. 推荐一个第三方Qt库的集合
  11. tasklet和workqueue的选择
  12. MySQL创建表的语句
  13. Linux DHCP原理
  14. JAVA_SE基础——14.循环结构语句
  15. Compass 更智能的搜索引擎(1)--入门
  16. Win10系列:C#应用控件进阶7
  17. 浏览器iscroll
  18. python2入门(2)
  19. 设计一款相册APP,代替系统自带的相册功能,列举主要功能
  20. [No0000188][VCB-Studio 科普教程 2.5] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)

热门文章

  1. springboot传值踩坑
  2. Mysql 事务及其原理
  3. jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )
  4. python将字符串插入表中避免单双引号问题
  5. 《Web Development with Go》Middleware之使用gorilla.handlers
  6. P3747 [六省联考2017]相逢是问候
  7. CMKAE简单实用指南
  8. vue介绍以及相关概念理解大全
  9. 【Linux命令】setfacl、getfacl命令基本用法(文件权限全文控制列表acl)
  10. c++ LeetCode (网易面试题和链表以及树篇) 五道算法例题代码详解(三)