题意:给你两个长度分别为n(1 <= N <= 1000000)和m(1 <= M <= 10000)的序列a[]和b[],求b[]序列在a[]序列中出现的首位置。如果没有请输出-1。

这题用裸KMP算法O(N)水过~

KMP算法的两个函数:

Code(hdu1711):

#include <stdio.h>
#include <string.h> const int maxn = 1000005;
const int maxm = 10005;
int a[maxn], b[maxm], next[maxm];
int n, m; void Read()
{
int i;
scanf("%d%d",&n, &m);
for(i=0; i<n; i++) scanf("%d", &a[i]);
for(i=0; i<m; i++) scanf("%d", &b[i]);
} void Get_Next()
{
int i, j;
i = 0;
next[0] = -1;
j = -1;
while(i<m) {
if(j==-1||b[i]==b[j]) {
i++;
j++;
next[i] =j;
} else {
j = next[j];
}
}
} int Kmp()
{
int i, j;
i = 0;
j = 0;
while(i<n&&j<m) {
if(j==-1||b[j]==a[i]) {
i++;
j++;
} else {
j=next[j];
}
}
if(j>=m)
return i - j + 1;
else
return -1;
} int main()
{
int T;
scanf("%d",&T);
while(T--) {
Read();
Get_Next();
int ans = Kmp();
printf("%d\n",ans);
}
return 0;
}

hdu1711(终于搞懂了KMP算法了。。)的更多相关文章

  1. 终于搞懂了vue 的 render 函数(一) -_-|||

    终于搞懂了vue 的 render 函数(一) -_-|||:https://blog.csdn.net/sansan_7957/article/details/83014838 render: h ...

  2. 萌新也能看懂的KMP算法

    前言 算法是什么?算法就是数学规律.怎么去总结和发现这个规律,就是理解算法的过程. KMP算法的本质是穷举法,而并不是去创造新的匹配逻辑. 以下将搜寻的字符串称为子串(part),以P表示.被搜寻的字 ...

  3. [转]我花了一个五一终于搞懂了OpenLDAP

    轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的 ...

  4. 探索JAVA并发 - 终于搞懂了sleep/wait/notify/notifyAll

    > sleep/wait/notify/notifyAll分别有什么作用?它们的区别是什么?wait时为什么要放在循环里而不能直接用if? ## 简介 首先对几个相关的方法做个简单解释,Obje ...

  5. 终于搞懂了PR曲线

    PR(Precision Recall)曲线 问题 最近项目中遇到一个比较有意思的问题, 如下所示为: 图中的PR曲线很奇怪, 左边从1突然变到0. PR源码分析 为了搞清楚这个问题, 对源码进行了分 ...

  6. Lua的闭包详解(终于搞懂了)

    词法定界:当一个函数内嵌套另一个函数的时候,内函数可以访问外部函数的局部变量,这种特征叫做词法定界 table.sort(names,functin (n1,n2) return grades[n1] ...

  7. 终于搞懂了shell bash cmd...

    问题一:DOS与windows中cmd区别 在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分, ...

  8. IntelliJ IDEA 部署 Web 项目,终于搞懂了!

    这篇牛逼: IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行. 最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse,为了 ...

  9. 终于搞懂Spring中Scope为Request和Session的Bean了

    之前只是很模糊的知道其意思,在request scope中,每个request创建一个新的bean,在session scope中,同一session中的bean都是一样的 但是不知道怎么用代码去验证 ...

随机推荐

  1. C++中的unordered_map

    1.简介 随着C++0x标准的确立,C++的标准库中也终于有了hash table这个东西.很久以来,STL中都只提供<map>作为存放对应关系的容器,内部通常用红黑树实现,据说原因是二叉 ...

  2. 关于GitHub账号及文章选题

    课程:软件测试基础 姓名:胡东妮 学号:2014218028 github账号:hudongni1 文章选题:测试用例的自动生成  邮箱:dongnihu@tju.edu.cn

  3. mysql-connector-c 安装

    cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local make make install

  4. maven打包成第三方jar包且把pom依赖包打入进来

    <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId& ...

  5. JS 节流阀

    JS 节流阀 参考 https://github.com/hahnzhu/read-code-per-day/issues/5 节流阀 节流阀的基本原理 事件函数的执行都记下当前时间, 只有当前时间与 ...

  6. 动态调用python类和函数

    类 class test1(object): def __init__(self): print "i am test1" class test2(object): def __i ...

  7. UVA-548Tree(二叉树的递归遍历)

    Tree Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Des ...

  8. [置顶] 【GBT28181开发:SIP协议实践】之设备远程启动

    下面学习的是设备远程控制的流程,和设备信息.设备目录.设备状态的流程差不多,主要是描述的协议字段不同,模拟SPVMN系统向源设备发送远程启动控制指令,记录下交互的消息,详细研究了下: 转载请注明出处: ...

  9. cocos2d-x-3.1 Text Labels(官方正式译文)

    介绍 cocos2d支持(true type字体)标签,和纹理地图集标签. LabelTTF 标签的优缺点: 全部 TTF 字体的长处: 随意大小,支持调整字距. 易于使用. 不须要外部编辑器. 创建 ...

  10. Javascript声明变量类型

    声明变量类型 当您声明新变量时,可以使用关键词 "new" 来声明其类型: var carname=new String; var x= new Number; var y= ne ...