[算法运用]KMP实战演练
来源:互联网 发布:淘宝男士休闲鞋黑色 编辑:程序博客网 时间:2024/06/06 00:45
看完花名,滚来写总结了。( >﹏<。)~呜呜....
题目:HDU1358
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1358
大意:求字符串子串最大分割自我循环次数。(表达的不好)
解题: 第一念头想着用KMP两层循环切割字符串,第一层处理原串,第二层处理模式串。
代码:然后费了好大的劲写了出来,结果,结果超时了 (┬_┬),(喂,这是理所应当的吧)。
没办法只好搜答案,发现只要运用next数组就可以解决了 (* ̄▽ ̄)y !
同时发现了自己的一个误区,原本以为next数组的值小于等于 slen/2,但实际上只要小于 slen就可以了。
同时可以发现,当next[slen]>slen/2,前缀与后缀有重叠的部分,通过观察可以发现答案与其的关系,至于原理目前未想通,(´Д`)
- 原来单单用next数组就可以算出字符串的自我循环次数了。 (* ̄︶ ̄)y
- 以上
#include <algorithm>using namespace std;char s[1000000];int nextp[1000000];void getnextp(char p[], int nextp[]){ int i = 0, j = -1, l = strlen(p); nextp[0] = -1; while(i<l) { if(j==-1||p[i]==p[j]) { i++; j++; nextp[i] = j; } else j = nextp[j]; }}int main(){ int i, n,out = 0; while (scanf("%d", &n),n) { getchar(); gets(s); printf("Test case #%d\n", ++out); getnextp(s,nextp); for(i=2;i<=n;i++) { if(!(i%(i-nextp[i]))&&i/(i-nextp[i])!=1) printf("%d %d\n", i, i/(i-nextp[i])); } printf("\n"); }}
- [算法运用]KMP实战演练
- CF126B KMP算法运用
- UVA11475 KMP算法简单运用
- VC++2012编程演练数据结构《18》KMP算法
- hdu2203 KMP算法运用(重要)
- Period poj 1961 KMP算法的运用
- KMP算法(简单的运用)
- Hdu 2087 kmp算法的运用
- MLlib分类算法实战演练--Spark学习(机器学习)
- MLlib分类算法实战演练--Spark学习(机器学习)
- MLlib分类算法实战演练--Spark学习(机器学习)
- 经典算法题每日演练——第七题 KMP算法
- 经典算法题每日演练——第七题 KMP算法
- samba3.0实战演练
- 实战演练Autotools
- dojo实战演练
- leetcode 实战演练
- OpenStack实战演练
- [putty]设置SSH Tunnel,将本地端口映射到服务器地址端口实现通过本地端口访问服务器服务
- ceil — 进一法取整 4.1 = 5 5.9 = 6 取小数点两位
- PHP执行MYSQL存储过程报错:Commands out of sync; you can't run this command now 问题的解决
- 在EditPlus中配置C/C++运行环境
- 需求用例文档编写建议 --事件流程(基本流程和扩展流 (
- [算法运用]KMP实战演练
- (转)临界区,互斥量,信号量,事件的区别(线程同步)
- platform device和platform driver
- Java里判断Image文件信息格式
- 超酷HTML5和CSS3实现的登录及其注册功能表单
- inactive sessiono
- C#结合串口通信类实现串口通信源代码
- Java中Font和JRadioButton应用
- concat