题目大意:
  给定一个长度为$n(n\leq10^6)$的字符串$S$,定义一个串$S$的最大周期为一个不为$S$的字符串$Q$,满足$Q$为$S$的前缀且$S$为$QQ$的前缀。求字符串$S$的每一个前缀的最大周期长度之和。

思路:
  KMP+DP。
  不难发现串$S$去掉前缀串$Q$后,剩下的串是$Q$的最短非空前缀。首先用KMP算法求出$next$数组。然而$next$求出来是最长,要让它变成最短,需要用DP的思想,向前找到最初的非0$next$对应的长度$f_i$,最后求$\sum(i-f[i])$即可。

 #include<cstdio>
typedef long long int64;
const int N=1e6+;
char s[N];
int n,next[N],f[N];
int main() {
scanf("%d%s",&n,s);
for(register int i=,j=next[]=-;i<n;next[++i]=++j) {
while(~j&&s[i]!=s[j]) j=next[j];
}
int64 ans=;
for(register int i=;i<=n;i++) {
f[i]=next[i]?f[next[i]]:i;
ans+=i-f[i];
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Why do we live in this world?
  2. C#接扣和抽象类
  3. 每日英语:A Different Color: China&#39;s Chameleonic Politics
  4. 1445 送Q币
  5. DOM0,DOM2,DOM3事件,事件基础知识入门
  6. 全排列 (codevs 1294)题解
  7. jquery cdn加速点
  8. net-ldap for ruby openNebula ldap
  9. 微信公众平台应用开发框架sophia设计不足(1)
  10. 《Qt on Android核心编程》介绍
  11. 将java项目打包为jar
  12. [NewLife.XCode]实体类详解
  13. Json的序列化与反序列化以及乱入的k_BackingField
  14. DDL触发器(用来控制用户的DDL行为)
  15. C# 哈希加密
  16. mono+jexus 部署之CompilationException
  17. Sql Server 2005 镜像后收缩日志
  18. 使用range()生成自然数序列
  19. 【转-mysql索引失效的几种情形】
  20. WPF根据数据项获取条目控件的方法-ItemContainerGenerator

热门文章

  1. [转]个人对AutoResetEvent和ManualResetEvent的理解
  2. 深入理解synchronize
  3. Mysql DISTINCT问题
  4. Python数据分析-Numpy数值计算
  5. django的聚合函数和aggregate、annotate方法使用
  6. C# 命名管道
  7. GDI+实现双缓冲绘图方法一
  8. lombok 去除麻烦的实体类get和set,toString书写
  9. 【Luogu】P3288方伯伯运椰子(消圈定理)
  10. linux shell常用语法