kmp入门小结

void get_next(char *s)
{int len = strlen(s);int j = 0; int k = -1;while (j < len){if (k == -1 || s[j] == s[k]){j++; k++; next[j] = k;}else k = next[k];}
}

设t = next[i]; next[i] 表示的是 i之前最大的t满足 s[0...t-1]  =  s[i-t...i-1]

比如 0123 4 0123 5 ,next[9] = 4.

结论:len - next[len] 为最小覆盖子串。

Poj3461 Oulipo

题意:给出两个串,问第二个串在第一个串中出现的次数

/* ***********************************************Author        : 一个西瓜Mail          : 879447570@qq.comCreated Time  : 2015-04-07 16:24:21Problem       : Oulipo
************************************************ */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std; 
#define INF 1000000000
//typedef __int64 LL; const int maxn = 11111;
int next[maxn];
char str[maxn];
char str1[maxn*100];void get_next(char *s)
{next[0] = -1;int j = 0 ;int k = -1;int len = strlen(s);while(j<len){if(k==-1||s[j]==s[k]){j++;k++;next[j] = k;}else k = next[k];}
}int gao(char *s1,char *s2)
{int ans = 0;int len1 = strlen(s1);int len2 =strlen(s2);int j = -1;int k = -1;while(j<len2){if(k==-1||s1[k]==s2[j]){j++;k++;//printf("%d %d\n",j,k);
        }else k = next[k];if(k==len1){ans++;k = next[k];}}return ans;
}int main()
{int T;cin>>T;while(T--){cin>>str;cin>>str1;get_next(str);int k = gao(str,str1);cout<<k<<endl;}return 0;
}
View Code

Poj1961 Period

就用到上面那个结论了

/* ***********************************************Author        : 一个西瓜Mail          : 879447570@qq.comCreated Time  : 2015-04-07 17:50:15Problem       : Period
************************************************ */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std; 
#define INF 1000000000
//typedef __int64 LL; const int maxn = 1111111;
int next[maxn];
char str[maxn];
void get_next(char *s)
{int len =strlen(s);int j = 0;int k = -1;next[0] = -1;while(j<len){if(k==-1||s[j]==s[k]){j++;k++; next[j] = k;}else k = next[k];}
}int main()
{int Icase = 0 ;int n;while(scanf("%d",&n)&&n){if(Icase) cout<<endl;printf("Test case #%d\n",++Icase);scanf("%s",str);get_next(str);int len = strlen(str); for(int i = 1;i<len;i++){int t = i+1;if(t%(t - next[t])==0&&(t/(t-next[t])!=1)){printf("%d %d\n",t,t/(t - next[t]));}}}return 0;
}
View Code

Poj2752 Seek the Name, Seek the Fame

给出一个串,问哪些既是前缀,又是后缀。

next数组不就是,到当前串的第i个位置,既是这个子串的前缀又是后缀的最长前缀么。迭代下去求就行了。

/* ***********************************************Author        : 一个西瓜Mail          : 879447570@qq.comCreated Time  : 2015-04-07 17:28:12Problem       : Seek the Name, Seek the Fame
************************************************ */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std; 
#define INF 1000000000
//typedef __int64 LL; const int maxn = 4*1e5 +10;
int next[maxn];
char str[maxn];void get_next(char *s)
{next[0] = -1;int len =strlen(s);int j = 0 ;int k = -1;while(j<len){if(k==-1||s[j]==s[k]){j++;k++;next[j] =  k;}else k = next[k];}
}
vector<int> q;
int main()
{while(scanf("%s",str)!=EOF){get_next(str);q.clear();int k = strlen(str);q.push_back(k);k = next[k];while(k){q.push_back(k);k = next[k];}for(int i = q.size() - 1;i>=0;i--){printf("%d ",q[i]);}cout<<endl;}return 0;
}
View Code

Poj2406 Power Strings

和1961一样的。

/* ***********************************************Author        : 一个西瓜Mail          : 879447570@qq.comCreated Time  : 2015-04-07 17:50:40Problem       : Power Strings
************************************************ */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std; 
#define INF 1000000000
//typedef __int64 LL; const int maxn = 1e6+10;
char str[maxn];
int next[maxn];void get_next(char *s)
{int len =strlen(s);int j = 0 ;int k = -1;next[0] = -1;while(j<len){if(k==-1||s[j]==s[k]){j++;k++; next[j] = k;}else k = next[k];}
}int main() {while(cin>>str){if(str[0]=='.') break;get_next(str);int len = strlen(str);if(len%(len-next[len])==0)cout<<len / (len - next[len])<<endl;else cout<<1<<endl;}return 0; 
}
View Code

 

转载于:https://www.cnblogs.com/yigexigua/p/4442651.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于visual Studio2013解决面试题之0807strstr函数

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*写strstr函数简单的遍历去查找吧 */#include <iostream> #include <stdio.h>const char *my_strstr(const char *str, const char *sub_str) {// 遍历for(int i 0; str[i] ! \0; i){int tem i; //tem保…

aop在项目中的实际运用_mypy在实际项目中的应用

我认为静态类型似乎被吹捧过高了。尽管如此&#xff0c;mypy极低的侵入性能带来许多好处。关于如何在现有的Python项目中添加类型&#xff0c;以下是我的一些想法&#xff0c;大致按重要性排序。首先确保mypy成功运行 Mypy上手时两个很常见的问题有&#xff1a;1.Mypy没有作为构…

face alignment by 3000 fps系列学习总结(三)

训练 我们主要以3000fps matlab实现为叙述主体。 总体目标 我们需要为68个特征点的每一个特征点训练5棵随机树&#xff0c;每棵树4层深&#xff0c;即为所谓的随机森林。 开始训练 分配样本 事实上&#xff0c;对于每个特征点&#xff0c;要训练随机森林&#xff0c;我们需…

HDU 2049 不容易系列之(4)——考新郎( 错排 )

链接&#xff1a;传送门思路&#xff1a;错排水题&#xff0c;从N个人中选出M个人进行错排&#xff0c;即 C(n,m)*d[m]补充&#xff1a;组合数C(n,m)能用double计算吗&#xff1f;第二部分有解释 Part 1. 分别求出来组合数的分子和分母然后相除/******************************…

linux服务器选ubantu或centos_如何通过SSH连接阿里云上的Linux系统

首先SSH是啥&#xff0c;维基一下&#xff1a;Secure Shell&#xff08;安全外壳协议&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接…

paypal之nodejs 框架 Kraken-js 源码分析

本文是基于 kraken-js 0.6.1 版本的 关于如何使用kraken-js 可以去看看官网的使用文档 点击这里 。kraken-js 是基于express之上的&#xff0c;目的在于让工程师更多的去关注代码逻辑&#xff0c;少关注自身的开发环境&#xff0c;所以他将express所有的一些公用的配置都写在了…

go build 参数_Go语言 通过go bulid -tags 实现编译控制

Go语言提供的build tag 条件编译特性&#xff0c;顾名思义&#xff0c;只有在特定条件下才会构建对应的代码。比如下面的源文件只有在设置debug构建标志时才会被构建&#xff1a;// build debugpackage mainvar buildMode "debug"可以用以下命令构建&#xff1a;go …

selinux 的管理

第十单元selinux 的管理一 显示及更改 SELINUX 模式getenforce ###显示selinux模式setenforce 0|1 ##0指permissive警告&#xff0c;1 表示 enforcing强制###vim /etc/sysconfig/selinux ###修改selinux开机状态###注&#xff1a;disable表示关闭&…

ubuntu15.10下安装opencv2.4.9python上调用opencv库

对于centos&#xff0c;可以参考&#xff1a;Install OpenCV-Python in Fedora 如果IPP难以下载可以在cmake时禁掉它&#xff0c;只需&#xff1a;cmake -DWITH_IPPOFF OpenCV3.3CUDA9.0 安装过程中遇到的问题&#xff0c;解析&#xff1a; https://blog.csdn.net/u014613745/a…

键盘改键软件_一秒五键,一键三招,万种光污染,杜伽K310樱桃轴机械键盘感受...

机械键盘我一直用的青轴&#xff0c;或者各种其他名字但其实本质就是青轴的。喜欢青轴那种清脆的声音&#xff0c;在我听来如同山间小溪流水般的叮咚。不过这声音在夜间分外的具有穿透力&#xff0c;更会在人身体不好的时候难以承受&#xff0c;所以每每用过之后却又不得不换回…

codeigniter钩子的使用

CodeIgniter 的钩子功能&#xff0c;使得我们可以在不修改系统核心文件的基础上&#xff0c;来改变或增加系统的核心运行功能。可是钩子究竟该怎么用呢&#xff1f;虽然不是很难&#xff0c;不过很多刚用ci的朋友可能还是不明白怎么用。 通过本文的简单实例&#xff0c;大家一下…

powerdesigner画关系图_想画好手绘,这些图你一定要画一下!

画好手绘除了对透视要深入了解掌握以及线条运用把握之外&#xff0c;还有很重要的就是要对空间物体的关系、比例、光影关系都要理解透彻。大体快可分割成多个x小体块。其实当年学习的绘画基础也是画好手绘的基础&#xff0c;画手绘依然需要去理解整体画面的空间黑白灰、物体穿插…

internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册

大家好&#xff0c;这是专栏《TensorFlow2.0》的第五篇文章&#xff0c;我们对专栏《TensorFlow2.0》进行一个总结。我们知道全新的TensorFlow2.0 Alpha已经于2019年3月被发布&#xff0c;新版本对TensorFLow的使用方式进行了重大改进&#xff0c;为了满足各位AI人对TensorFlow…

Facial Landmark Detection(人脸特征点检测)

原文地址&#xff1a;http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作为计算机视觉研究员&#xff0c;我们很早就开始研究人脸。人脸分析领域最广为人知的就是人脸识别&#xff08;face recognition&#xff09;.但是为了识别一幅图像中的人脸&…

Java中的Error和Exceptiond的异同点

Error和Exception的异同点&#xff1a; &#xff08;1&#xff09;Error类和Exception类都继承超类Java.lang.Throwable &#xff08;2&#xff09;Error&#xff1a;一般指与虚拟机相关的问题&#xff0c;如系统崩溃&#xff0c;内存溢出等。对于这类错误&#xff0c;仅靠程序…

superviseddescent (SDM C++11实现)环境配置

今天试着用了一下SDM的C11实现&#xff0c;本来以为挺简单的&#xff0c;可是配置环境还是花了一些时间。为了给自己留下一些记忆&#xff0c;特把配置过程记录下来。 这个实现是C11的版本&#xff0c;是一个通用版本&#xff0c;里面包含了很多的功能&#xff0c;比如函数的最…

python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

手把手制作Python小游戏&#xff1a;俄罗斯方块1大家好&#xff0c;新手第一次写文章&#xff0c;请多多指教 A.准备工作&#xff1a; 这里我们运用的是Pygame库&#xff0c;因为Python没有内置&#xff0c;所以需要下载 如果没有pygame&#xff0c;可以到官网下载 pygame官网&…

关于Git使用的一些心得

2019独角兽企业重金招聘Python工程师标准>>> 本篇稍微记录下Git使用的一些心得。 对Git的使用&#xff0c;应该是从搭建自己的博客开始的。当时看到开源中国推荐的一篇基于码云hexo搭建自己博客的文章。所以就花了一天时间鼓捣了下博客。 顺带整理下目前能看到我写的…

Dlib机器学习库安装

昨天使用了一下dlib的人脸检测功能&#xff0c;效果出奇的好。下面给出dlib整个的安装过程和使用指导。 下载安装 我们可以从dlib的官网下载最新的版本&#xff0c;我的是dlib18.18.然后我们需要使用cmake编译dlib库和examples示例。 当然前提是你要按照好cmake和opencv。 …

ipv4地址是几位二进制数_几张思维导图,让你清楚的知道ip地址怎么回事?

网络工程中&#xff0c;ip地址是必须要了解的内容&#xff0c;今天我们用几张思维导图来给大家详细讲解IP地址。一、什么是IP地址在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地…