1468:OKR-Periods of Words

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 98     通过数: 44

【题目描述】

原题来自:POI 2006

串是有限个小写字符的序列,特别的,一个空序列也可以是一个串。一个串 P 是串 A 的前缀,当且仅当存在串 B,使得 A=PB。如果P≠A并且 P 不是一个空串,那么我们说 P 是 A 的一个 proper 前缀。

定义 Q 是 A 的周期,当且仅当 Q 是 A 的一个 proper 前缀并且 A 是 QQ 的前缀(不一定要是 proper 前缀)。比如串 abab 和 ababab 都是串 abababa 的周期。串 A 的最大周期就是它最长的一个周期或者是一个空串(当 A 没有周期的时候),比如说,ababab 的最大周期是 abab。串 abc 的最大周期是空串。

给出一个串,求出它所有前缀的最大周期长度之和。

【输入】

第一行一个整数 kkk,表示串的长度。

接下来一行表示给出的串。

【输出】

输出一个整数表示它所有前缀的最大周期长度之和。

【输入样例】

8
babababa

【输出样例】

24

【提示】

数据范围:

对于全部数据,1<k<106​​ 。

题意:

若Q是A的proper前缀(不为空,不为A),且A是QQ的前缀(可为空和QQ),则成为Q是A的周期,求字符串的所有前缀的最大周期和。

 思路:

都知道kmp中next数组求出的是最大真前缀,这题就是要求最小真前缀,为什么呢,理由如下:

其实就是要求每个子串的最小前缀长度之和

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ull unsigned long long
typedef pair<int,int>P;
const int INF=0x3f3f3f3f;
const int N=1000015,mod=32767;
char p[N];
int nex[N],len;void getNext(char p[]){nex[0]=-1;nex[1]=0;for(int i=2;i<=len;i++){int k=nex[i-1];while(k>=0&&p[k-1+1]!=p[i-1])k=nex[k];nex[i]=k+1;}
}int main(){scanf("%d%s",&len,p);getNext(p);ll ans=0;for(int i=2;i<=len;i++){while(nex[nex[i]]>0)nex[i]=nex[nex[i]];//printf("%d\n",nex[i]);if(nex[i]!=0)ans+=(i-nex[i]);}printf("%lld\n",ans);
}

OKR-Periods of Words - kmp相关推荐

  1. kmp求前缀和后缀的最大重复部分

    hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值 2013-06-05 11:16 1199人阅读 评论(0) 收藏 举报  分类: KMP(8)  版权声明:本文为博主原创文章, ...

  2. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  3. MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP

    题目链接 题意:意思给你俩数一个字符串,然后让你对字符串小数点后边的字符串进行处理,找个一个循环节以及对应出现的长度, 然后用a*p-b*l算得到一个最大值 那肯定循环节就想到了KMP了,然后循环长度 ...

  4. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  5. 字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现

    文章目录 1. 算法背景 2. BM(Boyer-Moore)算法 2.1 坏字符规则(bad character rule) 2.2 好后缀规则(good suffix shift) 2.3 复杂度 ...

  6. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  7. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  8. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  9. 算法(2)KMP算法

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

  10. KMP算法求回溯数组的步骤

    KMP算法到底是什么原理就不说了,各种资料上讲的明明白白,下面我就如何用代码来实现做一下说明和记录. KMP的核心思想就是,主串不回溯,只模式串回溯.而模式串匹配到第几位时失配,要回溯多少,由模式串本 ...

最新文章

  1. Eclipse用法和技巧十:显示代码outline
  2. Android--Handler使用
  3. DV型、OV型、EV型三种SSL证书 区别
  4. XCode中修改应用的名字
  5. 中科大计算机竞赛夺冠,中科大斩获全国唯一特等奖,力压清华捧得华为毕昇杯...
  6. JS, CSS 文件压缩与反压缩工具
  7. java web中的相对路径和绝对路径
  8. iOS之中国银联移动支付控件升级的问题
  9. oracle双机python连接_Python 连接 Oracle 示例
  10. A Game of Thrones(109)
  11. 用pod安装swiftyJson的一个实例
  12. Python提取PDF中的信息,写入Excel
  13. springboot快速开发框架,适合二次开发(一)
  14. 认知神经学lecture1---感受与感知
  15. Day524.其他数据库日志 -mysql
  16. 安装es-header插件
  17. 熬粥记:煮一碗红豆粥,3次才领悟煮粥大法
  18. 12563 劲歌金曲
  19. SAT OG 写作辅导:良知是一种比金钱名望和权力更有力的激励?
  20. 并联串联混合的电压和电流_【中学物理】电流传感器在串联、并联电路中的应用...

热门文章

  1. Ubuntu18.04为EW-7822ULC网卡安装驱动
  2. 美国服务器电影网站版权问题,为什么说选择美国服务器做电影网站比较好
  3. The server encountered an internal error () that prevented it from fulfilling this request
  4. python动作识别库_教你快速使用OpenCV/Python/dlib进行眨眼检测识别!
  5. 皮皮虾vs最右短视频分析
  6. 互联网时代成功创业故事
  7. jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
  8. AndroidSwipeLayout:最强大的 Swipe Layout
  9. 【vue 导出功能】file-saver插件
  10. OpenStack资源整理(转自陈沙克)