文章目录

  • 题目描述
  • 解析
  • 问题
  • 总结
  • 代码

题目描述

解析

我们可以看到
如果A是B的周期
那么B一定可以写成:

A1A2A1

的形式
注意到:A1就是KMP中的公共前后缀
要使A最大,要使A1最短
也就是求最短公共前后缀
这怎么求呢?
我们注意到:
B的最短前后缀,其实也是B的最长前后缀(就是KMP处理出来的那个东西)的最短前后缀
所以递归求解即可,过程类似于并查集
边界条件:失配数组为0时返回本身

int find(int x){return p[x] ? p[x]=find(p[x]) : x;
}

问题

这题看了题解
一开始思路其实差不多
但就是觉得似乎考虑不到最短公共前后缀大于字符串长度一半的情形
但后来自己又想想其实这样使不存在的
如图

它一定还会存在更短的公共前后缀(就是图中红色的部分)
这样就解决啦

总结

对KMP的理解还是要加深一些
本题类似并查集的方法找最短公共前后缀的方法也值得借鉴

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+100;
char s[N];
int p[N],l,k;
void solve(){p[1]=0;for(int i=1,j=0;i<=l;i++){while(j>0&&s[i+1]!=s[j+1]) j=p[j];if(s[i+1]==s[j+1]) j++;p[i+1]=j;}return;
}
int find(int x){return p[x] ? p[x]=find(p[x]) : x;
}
int main(){scanf("%d",&k);scanf(" %s",s+1);l=strlen(s+1);solve();ll ans=0;for(int i=1;i<=l;i++) ans+=i-find(i);printf("%lld",ans);
}

周期长度和(KMP)相关推荐

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

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

  2. 【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

    正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀,若Q是A的proper前缀,且A是QQ的前缀 现在问你字符串S所有前缀的最 ...

  3. 两个企业级产品设计思路:流程效率指标功能生命周期长度

    最近又一轮的创投圈资本寒冬到来,以往依靠融资进行持久战的引流,拉用户,广告变现这一漫长的C端打法已经不再被资本市场所推崇,而是转变为追求如何快速变现,一单就有一单钱的短投资周期模式.而此时B端产品的优 ...

  4. 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...

  5. 【KMP】OKR-Periods of Words

    [KMP]OKR-Periods of Words 题目描述 串是有限个小写字符的序列,特别的,一个空序列也可以是一个串.一个串P是串A的前缀,当且仅当存在串B,使得A=PB.如果P≠A并且P不是一个 ...

  6. 1468:OKR-Periods of Words(kmp算法)

    [题目描述] 原题来自:POI 2006 串是有限个小写字符的序列,特别的,一个空序列也可以是一个串.一个串 P 是串 A 的前缀,当且仅当存在串 B,使得 A=PB.如果P≠A并且 P 不是一个空串 ...

  7. Java对象的生命周期与作用域的讨论(转)

    导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对 ...

  8. 单片机指令周期、机器周期、状态周期、时钟周期

    单片机的系统指令周期根据不同的内核架构各有区别. 8051系列单片机采用的是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号.它的指令周期.机器周期等也是根据时钟脉冲信号来确定.下面说 ...

  9. OpenJ_Bailian 4148 生理周期

    题目地址: https://vjudge.net/problem/OpenJ_Bailian-4148 人生来就有三个生理周期,分别为体力周期.感情周期和智力周期,它们的周期长度分别为23天.28天和 ...

最新文章

  1. 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用
  2. linux导入函数包失败,使用qsub运行shellscript时出现apos;文件意外结束apos;和apos;错误导入函数定义apos;错误 中国服务器网...
  3. 转载:介绍几本专业的书籍,一起学习
  4. Java处理微博数据集中的超链接
  5. ctfshow-萌新-web6( 利用二进制绕过获取网站敏感信息)
  6. Delphi编译指令了解学习
  7. 初中数学知识点总结_初中数学函数知识点总结
  8. 你真的懂Linux吗?Linux运维快速入门学习方法
  9. 利用Audacity软件分析ctf音频隐写
  10. 计算24点有什么窍门或技巧吗?
  11. 小米mix2s主板电路图
  12. 求助各位大神JSP报错急急急!!!!感激不尽
  13. 第2章 变量、数据类型、运算符
  14. 面试问遇到最难的事情_太难的事情
  15. idea中不显示代码下边的下划线
  16. 东北大学C语言课程题库题解专栏目录
  17. 赵鹏计算机专业,赵鹏 - 安徽大学 - 计算机科学与技术学院
  18. 【更新】MindFusion.WinForms Pack v2019.R1发布,改进Visio2013Exporter
  19. 深度学习代码学习笔记(一)——阶跃函数与激活函数的python代码实现
  20. github clone 代码到本地全步骤

热门文章

  1. 电子计算机制作探测,如何自己制作一个简易的金属探测器
  2. MySQL调用mongodb事务回滚_SpringBoot整合MongoDB,在多数据源下实现事务回滚。
  3. oracle中sql行数的计算,Oracle技术网—如何利用DBMS_SQL包和游标计算当前用户下所有表的行数...
  4. laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地
  5. php调用另一个php文件里的变量的值,thinkphp中一个方法调用另一个步骤的变量
  6. 古登堡是垂直搜索引擎吗_网站排名,提高内容输出频率,就一定要对排名好吗?-SEO...
  7. python笔试题 github_简单的python面试题,居然
  8. mysql mysqladmin 介绍_Mysql—mysqladmin 命令详解
  9. leetcode27:移除元素(暴力+双指针)
  10. C++实现各种排序以及复杂度,稳定性分析