1468:OKR-Periods of Words

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 523 通过数: 224
【题目描述】
原题来自: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 的最大周期是空串。

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

【输入】
第一行一个整数 k,表示串的长度。

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

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

【输入样例】
8
babababa
【输出样例】
24
【提示】
数据范围:

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


思路:若Q是A的proper前缀(不为空,不为A),且A是QQ的前缀(可为空和QQ),则成为Q是A的周期,求字符串的所有前缀的最大周期和。kmp中next数组求出的是最大真前缀,这题就是要求最小真前缀,其实就是要求每个子串的最小前缀长度之和。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int N = 1000015;
char p[N];
int next[N],lena;
void getnext(char p[]){next[0] = -1;next[1] = 0;for(int i=2;i <=lena;i++){int k = next[i-1];while(k >=0 && p[k-1+1]!=p[i-1])k = next[k];next[i] = k+1;}
}
int main(){scanf("%d%s",&lena,p);getnext(p);
ll ans = 0;
for(int i = 2; i <= lena;i++)
{while(next[next[i]]>0)next[i] = next[next[i]];if(next[i] != 0)ans += (i-next[i]); } printf("%lld\n",ans);return 0;
}

第2部分 字符串算法(提高篇)--第2章 KMP算法-1468:OKR-Periods of Words相关推荐

  1. 第2部分 字符串算法(提高篇)--第2章 KMP算法1469:似乎在梦中见过的样子

    1469:似乎在梦中见过的样子 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 476 通过数: 159 [题目描述] 原题来自:2014 年湖北省队互测 Week2 「Madok ...

  2. 第1部分 基础算法(提高篇)--第1章 贪心算法1425:【例题4】加工生产调度

    1425:[例题4]加工生产调度 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2047 通过数: 529 [题目描述] 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A ...

  3. 第2部分 字符串算法(提高篇)--第1章 哈希和哈希表1463:门票

    1463:门票 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 842 通过数: 172 [题目描述] RPK 要带 MSH 去一个更加神秘的地方! RPK 带着 MSH 穿过广场 ...

  4. AcWing提高算法课Level-3 第六章 基础算法

    AcWing提高算法课Level-3 第六章 基础算法 位运算 AcWing 90. 64位整数乘法761人打卡 递推与递归 AcWing 95. 费解的开关520人打卡 AcWing 97. 约数之 ...

  5. AcWing进阶算法课Level-4 第七章 基础算法

    AcWing进阶算法课Level-4 第七章 基础算法 启发式合并 AcWing 2154. 梦幻布丁73人打卡 AcWing 3189. Lomsat gelral54人打卡 manacher算法 ...

  6. AcWing算法提高课 Level-3 第二章 搜索

    池塘计数 题目 提交记录 讨论 题解 视频讲解 农夫约翰有一片 N∗M 的矩形土地. 最近,由于降雨的原因,部分土地被水淹没了. 现在用一个字符矩阵来表示他的土地. 每个单元格内,如果包含雨水,则用& ...

  7. 字符串:你看的懂的KMP算法(带验证)

    前言 KMP算法可以说说许多学习算法的同学的第一道坎,要么是领会不到KMP算法的思想,要么是知道思想写不出代码,网上各种查找.关于算法的书籍上也都有KMP算法的实现,可为啥自己写不出来呢?博主看得大话 ...

  8. 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法

    赵 刚 引言     在三维游戏等建立的虚拟世界中要求虚拟场景具有很高的逼真度,其中的三维地形逼真度是关键之一.然而三维地形的生成和绘制需要巨大的计算量,实景地形的生成还需要地形数据库的支持,在运算能 ...

  9. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  10. 【数据结构与算法基础】模式匹配问题与KMP算法

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

最新文章

  1. 超大磁盘分区工具parted使用介绍(一)
  2. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
  3. 【C# interface接口】对接口的理解、接口的使用方式(最通俗的解释)
  4. 小票上为啥指甲能划出印_指甲上出现竖纹,除遗传问题,或是身体在向你拉警报了,别忽视...
  5. 【Spark调优】内存模型与参数调优
  6. arm-none-linux-gnueabi交叉工具链 no such file or directory
  7. php大转盘,php大转盘
  8. 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
  9. Atitit 代码的导航 1.1.代码的层次导航 语句 函数方法 类 包 1.2.4.4. 代码可视化 流程图 一个方法内,多个代码行的关系图 语句to方法 2 1.3.4.5. 类图 类结构
  10. php 开发一元夺宝插件,yiyuanyungou 一元云购商城源码,商用 ci框架开发,带指定中奖插件 Other systems 其他 249万源代码下载- www.pudn.com...
  11. 硬件设计——DC-DC转换器
  12. PHP架构师成长路线,PHP架构师要求
  13. 新手购买基金的买入策略
  14. Graphics.DrawString 方法
  15. 如何安装/重装Win10系统?【保姆级教程】
  16. WEB安全之文件上传--白名单绕过%00截断
  17. Auto.js 实现钉钉实时抢红包
  18. 【时间复杂度】时间复杂度
  19. 数据爬取遇到EventStream是个什么东西?EventSource与websocket有何区别?Java后台如何获取爬取数据并入库?EventStream后台服务怎么写?
  20. ftl不存在为真_这个验证贝尔不等式的实验的真实性如何?是否真的意味着量子纠缠的发生是超光速的?...

热门文章

  1. 哪家python培训最好
  2. openstack(云主机热迁移)
  3. 视觉推理(Visual Reasoning)
  4. Android之远程查看异常崩溃信息——腾讯Bugly的自动集成
  5. Visio2013 补丁
  6. 四分位距IQR interquartile range
  7. Drug Target Review | 人工智能(AI)在基因组学中的作用
  8. 个人财务管理系统beancount-gs
  9. 中国大学MOOC保险学试题及答案
  10. Android利用WifiDirect实现文件传输功能