P3435 [POI2006]OKR-Periods of Words [Kmp, next数组]
OKR−PeriodsofWordsOKR-Periods\ of\ WordsOKR−Periods of Words
题目描述见链接 .
正解部分\color{red}{正解部分}正解部分
题目转化 为: 对每个前缀串, 求出其 最短公共前缀后缀, 答案即为 总长度 −-− 公共长度 .
自然而然地想到 KmpKmpKmp 的 next[]next[]next[] 数组, 但是 KmpKmpKmp 中的 next[]next[]next[] 数组 表示的是 最长公共前缀后缀, 考虑怎么转化,
不断执行 next[i]=next[next[i]]next[i] = next[next[i]]next[i]=next[next[i]], 直到 next[i]next[i]next[i] 将要等于 000, 这时 next[i]next[i]next[i] 就是 最短公共前缀后缀 了 .
实现部分\color{red}{实现部分}实现部分
#include<bits/stdc++.h>
#define reg register
typedef long long ll;const int maxn = 1e6 + 5;int N;
int nxt[maxn];char S[maxn];void Get_next(){nxt[0] = -1;int i = 0, t = -1;while(i < N){if(t == -1 || S[i] == S[t]) nxt[++ i] = ++ t;else t = nxt[t];}
}int main(){scanf("%d", &N); scanf("%s", S); Get_next();ll Ans = 0; nxt[0] = 0;for(reg int i = 1; i <= N; i ++){if(!nxt[i]) continue ; while(nxt[nxt[i]]) nxt[i] = nxt[nxt[i]];if(nxt[i] < i) Ans += i - nxt[i];}printf("%lld\n", Ans);return 0;
}
P3435 [POI2006]OKR-Periods of Words [Kmp, next数组]相关推荐
- 【题解】洛谷P3435 [POI2006] OKR-Periods of Words(KMP)
洛谷P3435:https://www.luogu.org/problemnew/show/P3435 思路 来自Kamijoulndex大佬的解释 先把题面转成人话: 对于给定串的每个前缀i,求最长 ...
- P3435 [POI2006]OKR-Periods of Words kmp + fail指针
传送门 文章目录 题意: 思路: 题意: 思路: 转换一下题意,就是求一个最小公共前后缀,显然可以暴跳nenene数组,复杂度O(n2)O(n^2)O(n2),注意到我们每次都跳的话会跳到很多重复的位 ...
- [POI2006]OKR-Periods of Words(KMP)
题意:给定一个字符串,求它的每个前缀的的一个最长前缀,使得它重复两边后能够覆盖原串. Solution 这题显然要在KMP的next数组上做一些手脚. 对于一个前缀,我们把它重复两遍,那么这个前缀的前 ...
- P3435 [POI2006]OKR-Periods of Words
传送门 KMP 对于这种一个字符串的问题 肯定先考虑KMP 如果一个串A要成为周期 设A长度为len_A,原串长度为len 那么串A要成为周期的充分必要条件就是: 从0 ~ (len-len_A)的串 ...
- POJ3080方法很多(暴力,KMP,后缀数组,DP)
题意: 给n个串(n>=2&&n<=10),每个串长度都是60,然后问所有串的最长公共子串,如果答案不唯一输出字典序最小的. 思路:直接暴力,枚举+KMP,后缀 ...
- kmp——next数组的应用---cout the string
点击打开链接 这道题的意思是找出每个子串与串的匹配程度,换句话说题意是,给一串字符串,问这串字符串所有的前缀总共在这个字符串中出现了几次.一开始直接想到的事用暴力求解但是算了一下会超时. 其实准确来说 ...
- 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...
- HGU3336 Count the string (KMP Next数组的应用)
题意:给出一个字符串,求它所有前缀在此字符串中出现的次数. 分析:一看,肯定是kmp中 next[i] 求以下标i-1结尾的字符串,使得最长的(前缀==后缀)的长度.很好想到,当next非零时,肯定和 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛——J.最大值【KMP next数组】【暴力(数据太水了!)】
题目传送门 题解 Ac串其实是kmp中next数组的含义,所以求 出字符串的next数组 即可得到答案. 不得不说,后台数据问题太大了,直接暴力 n 2 n^2 n2 的都能过!服了这数据 AC-Co ...
- 2019年秦皇岛J题:MUV LUV EXTRA(KMP后缀数组)
Problem Description 鉴纯夏是一名成绩不太好的高中生.一天她在数学考试中碰到了一道求某条线段长度的问题.因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度.不幸的是, ...
最新文章
- 字段定义_两大高招逐浪CMS中定义省地市县三级字段显示方式
- C#委托、事件、消息(入门级)
- change all day checkbox in Fiori ui
- Mybatis-plus 大数据量数据流式查询通用接口
- 单片机的内存分配(变量的存储位置)详解
- 我的第一次随笔——胡桂玲
- Codeforces 768B - Code For 1(分治思想)
- 管理九段,你的管理入围“几段”了?
- 联想交换机服务器型号,Dell Networking X系列交换机
- 机械硬盘显示位置不可用无法访问介质受写入保护
- 修改gh-ost源码实现两表在线高速复制
- fractions -- 分数
- 世界各国信用评级[来自维基百科]
- 链路聚合原理及配置过程
- 电脑显示器不亮的三种原因和解决方法
- 在UTF-8下写字库
- php windows vld,PHP安装VLD查看opcode
- 「Python语法结构」数据类型与运算符示例(7)
- android请求广告展示失败,玩咖优盟移动广告平台
- 【汇正财经】股票和债券的区别有哪些?哪个风险比较小?
热门文章
- 树莓派 Pico ADC温度测量
- 哪有什么太迟,世界多的是大器晚成
- postgresql: the application server could not be contacted --2020-11-17
- 000webhost提供 1500M免费空间 可绑顶级域名
- 用MATLAB对语音进行基频搬移,语音信号变声处理系.doc
- os_pend_multi.c
- 网站架构资料收集整理
- 性能测试LoadRunner
- Linux--用xmanager远程管理的设定过程
- 3. 项目立项三板斧-建议书-可行性研究-评估论证