正题

luogu 3435
ybtoj KMP-3


题目大意

定义S的proper前缀为S中非空且len<|S|的前缀,若Q是A的proper前缀,且A是QQ的前缀

现在问你字符串S所有前缀的最大周期之和


解题思路


如上图,对于一个字符串S,如果有周期Q,那么蓝色的一段是相同的,此时这段蓝色的是S的公共前后缀

不难发现,对于一段公共前后缀G,S-G即为S的一段周期(减后面的G),要求最大周期,则要使G最小

那么可以用KMP求出nx数组,然后往前跳,跳到0的上一个位置,这个过程和并查集相类似,也可以用到路径压缩


代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 1000100
using namespace std;
ll n, x, ans, nx[N];
char s[N];
ll find(ll x) { return nx[x] ? nx[x] = find(nx[x]) : x; }
void get_nx(char* s, ll n) {nx[1] = 0;for (ll i = 2, j = 0; i <= n; ++i) {while (s[i] != s[j + 1] && j) j = nx[j];if (s[i] == s[j + 1])j++;nx[i] = j;}return;
}
int main() {scanf("%lld%s", &n, s + 1);get_nx(s, n);for (ll i = 2; i <= n; ++i) ans += i - find(i);//加上剩下部分printf("%lld", ans);return 0;
}

【KMP】周期长度和(luogu 3435/ybtoj KMP-3)相关推荐

  1. 图解KMP算法,带你彻底吃透KMP

    模式串匹配--KMP算法 KMP算法一直是一个比较难以理解的算法,本篇文章主要根据<大话数据结构>中关于KMP算法的讲解,结合自己的思考,对于KMP算法进行一个比较详细的解释. 由于博主本 ...

  2. 【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)

    正题 luogu 3966 ybtoj AC自动机-2 题目大意 给你n个单词,让你查询这写单词分别在这n个单词中出现过多少次 解题思路 先用AC自动机建好图,然后每个点的权值为1,然后向nx传递 代 ...

  3. 【Trie】阅读理解(luogu 3879/ybtoj Trie-4)

    正题 luogu 3879 ybtoj Trie-4 题目大意 给你n篇文章,还有m个单词,问你这些单词在哪几篇文章中出现过 解题思路 对文章中的单词建Trie,然后那查询的单词去匹配 代码 #inc ...

  4. 第I题-生理周期(简单解法跳着试)====人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,

    人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏捷,精力容易 ...

  5. 【ZOJ3587】Marlon's String——白四爷×KMP 白濑肆の算法完全解读KMP篇 KMP来袭第二弹前缀什么的果然最讨厌了!【1.0%达成!】

    #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...

  6. java中KMP模式_朴素模式匹配算法、kmp模式匹配算法、kmp模式匹配算法改进。java代码...

    ** 朴素模式匹配算法.kmp模式匹配算法.kmp模式匹配算法改进.java代码** 思路过段时间整理~ 可以先看看阮一峰的这篇博客,字符串匹配的KMP算法 package edu.hubu.base ...

  7. 周期长度和(KMP)

    文章目录 题目描述 解析 问题 总结 代码 题目描述 解析 我们可以看到 如果A是B的周期 那么B一定可以写成: A1A2A1 的形式 注意到:A1就是KMP中的公共前后缀 要使A最大,要使A1最短 ...

  8. java中KMP模式,Java数据结构-串及其应用-KMP模式匹配算法

    串(string)是由零个或多个宇符组成的有限序列,又名叫字符串. 定义的解释: ??串中的字符数目n称为串的长度,定义中谈到"有限"是指长度n是一个有限的数值. ??零个字符的串 ...

  9. 数据结构 kmp字符串匹配_用动画解释 KMP 算法

    大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...

最新文章

  1. 经典论文复现 | ICML 2017大热论文:Wasserstein GAN
  2. Java中的局部变量表及使用jclasslib进行查看
  3. 【HihoCoder - 1881】特殊任务 (树形图,遍历)
  4. linux的常用操作——压缩和解压缩
  5. [最短路/线段树大法优化DIJ] 【模板】单源最短路径(标准版)
  6. java常用的日期类介绍
  7. 通向财务自由之路08_入市或市场时机选择
  8. 前端常见跨域解决方案
  9. java项目不要用反射_面试官:Java 反射是什么?我回答不上来!
  10. Hive数仓基本概念介绍
  11. Eclipse或者Myeclipse卡,慢的解决方法
  12. 安装了汉化包,svn却没有汉化
  13. 在火狐浏览器里怎么看请求头
  14. 毕达哥拉斯的数字和定理 -逻辑与算法之四
  15. MySQL系列数据库的安装和基本的使用方法笔记(MySQL,MariaDB)
  16. 同步机构应遵循哪些基本准则
  17. arthas-dashboard
  18. Word文档自动生成目录
  19. 【Microsoft Office】Office365 MAC版Word显示导航窗格
  20. 潘多拉 搭建 php服务器,MAYA带你重建潘多拉!

热门文章

  1. python中matplotlib库实例_Python Matplotlib库入门指南
  2. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
  3. java面向对象使用字符串_java面向对象中的String类中12种常用的方法
  4. mac 配置php和mysql_Mac下配置PHP+MySql环境
  5. JAVA当中Calendar类打印日历表单
  6. [Java基础]自动装箱和拆箱
  7. C++ class实现孩子表示法
  8. 高等数学上-赵立军-北京大学出版社-题解-练习5.3
  9. [蓝桥杯2017决赛]数位和-模拟(水题)
  10. C++继承同名静态成员处理