#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<vector>
#include<queue>
#include<stack>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std; #define MaxSize 1000005
#define inf 0x3f3f3f3f
#define LL long long int int n,m;
int ori[MaxSize],tar[MaxSize],NEXT[MaxSize];//有点醉,本来写的next和algorithm库里面的东西重名CE了。所以用不着的头文件别乱写。 void get_NEXT()
{
int i=;//i是指在目标串中走到了i位
int j=NEXT[]=-;//把这里设置成-1,而不是0,是非常巧妙的。j一直都是NEXT[i] while(i<m)//得到目标串的NEXT,注意范围
{
if(j==- || tar[j]==tar[i])//j==-1有两种情况,第一个是刚开始从第0位开始的时候,第二个是后面找不到相同的前缀后一位的时候
NEXT[++i] = ++j; else
j=NEXT[j]; /*如果一直这样代换下去,走到j=0的时候,然后进行下一次循环:j==-1不满足,
于是就比较tar[0]和tar[i],就是a.....|b的第一位a和现在在i位上的b比较。
如果j==0的时候tar[0]==tar[i]还不满足,说明前面所有的前缀的之后一位都没有和当前i位一样的。
那就应该有NEXT[++i]=0。在代码中,如果j==0的时候tar[0]==tar[i]还不满足,j就会走到-1,
(因为我们设置的NEXT[0]=-1)。于是下一步循环的时候,++j就就恰是0,于是NEXT[++i]=0,就是巧妙在这里*/
}
} int match()
{
int i=;//i是指在原始串中走到了i位置
int j=;//j是指在目标串中走到了j位置 while(i<n)//在原始串中从头到尾匹配,如果走到最后,过程中都没有return,说明没有找到匹配。最后while结束后就返回-1
{
if(j==- || ori[i]==tar[j])//一位一位匹配下去
{
i ++;
j ++;
} else//走到某一位的时候发现不能匹配,那么就移位。移位之后,j就跑到前缀的后一位,然后继续往后匹配。当然此时的i是不应该变的。
j=NEXT[j];
/*如果j代换到了j==0,(原始串:....a.....,目标串b.....)那么就是用当前原始串的第i位a比较目标串第一位b
如果还不能匹配,那么j就代换成-1,,原始串的i就到下一位,目标串的j本来是-1,加1之后就变成0,也就是又从第一位开始比较
巧妙的=NEXT[0]=-1。*/ if (j == m) return i-m+;//匹配完了,j就会走到目标串的最后一位(即m-1位)之后,j++就变成了m,这里就应该return了。
} return -;
} int main()
{
int T;
scanf("%d",&T); while(T--)
{
scanf("%d%d",&n,&m); for(int i=; i<n; i++)
scanf("%d",&ori[i]); for(int i=; i<m; i++)
scanf("%d",&tar[i]); get_NEXT();
/*for(int i=0;i<m;i++)
printf("%d ",NEXT[i]);printf("\n");*/
printf("%d\n",match());
} return ;
}

HDU 1711 Number Sequence---KMP原始的更多相关文章

  1. HDU 1711 Number Sequence(KMP裸题,板子题,有坑点)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. hdu 1711 Number Sequence KMP 基础题

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 1711 Number Sequence (KMP 入门)

    Number Sequence Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and ...

  4. HDU 1711 - Number Sequence - [KMP模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  5. HDU 1711 Number Sequence KMP

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1711 AC代码: #include <iostream> #include <cs ...

  6. HDU 1711 Number Sequence (字符串匹配,KMP算法)

    HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...

  7. HDU 1711 Number Sequence(数列)

    HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...

  8. HDU 1711 Number Sequence 【KMP应用 求成功匹配子串的最小下标】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/O ...

  9. HDU 1711 Number Sequence(KMP)附带KMP的详解

    题目代号:HDU 1711 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/ ...

  10. HDU 1711 Number Sequence (KMP简单题)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. Nginx 配置继承模型

    要了解nginx的继承模型,首先需要知道nginx使用多个配置块进行操作.在nginx中,这样的块被称为上下文,例如,放置在服务器上下文中的配置指令驻留在server { }块中,就像放置在http上 ...

  2. Urllib库:python内置的http请求库

    1.四个模块: request error parse robotparser 2.urlopen(url, data, timeout) 发送请求 get请求无data: post请求有data 3 ...

  3. ./vi: line 2: mkdir: command not found

    当前两天博主在写脚本的时候,运行脚本时候总是出现此消息,很郁闷, 开始我以为可能是我mkdir的函数库依赖的问题,但是当我用其他的脚本创建 目录的时候,命令又可以用了,找了半天,终于找到了答案 --- ...

  4. C语言字符篇(三)字符串比较函数

    #include <string.h>   int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(const ...

  5. Codeforces146D 概率DP

    Bag of mice The dragon and the princess are arguing about what to do on the New Year's Eve. The drag ...

  6. POJ:2976-Dropping tests(二分平均值)

    Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15508 Accepted: 5418 Descr ...

  7. 笔记-python-语法-property

    笔记-python-语法-property 1.      property 看到@property,不明白什么意思,查找文档了解一下. 1.1.    property类 proerty是pytho ...

  8. Codeforces 771E Bear and Rectangle Strips DP

    题意: 一个由大写字母组成的长度为\(n(n \leq 75)\)的字符串,每次操作可以交换相邻位置的两个字母,求最少操作多少次使字符串中不出现子串VK 分析: VK之外的字母具体是什么,我们并不关心 ...

  9. 使用闭包和lambda解决问题与常规方式解决问题的对比。

    先来描述一下问题吧,游戏中的物品原来只有一个属性加成:攻击,防御,获得经验加成,金币加成,等等.现在要增加一个属性,这个属性可以为之前的属性之一. 这个属性加成涉及到类里的三个属性,value,typ ...

  10. 用CSS伪元素制作箭头

    现在让我们开始制作箭头吧! 在开始前,你要知道如何用CSS去画一个三角形,如果还不清楚可以看看这里纯CSS画各种图形 我们用到两个CSS伪元素,before和after,它们属于行内元素,但可以用di ...