Hdu 1711 Number Sequence (kmp模板题)

来源:互联网 发布:模拟退火算法伪代码 编辑:程序博客网 时间:2024/05/17 06:33

题目链接:
https://vjudge.net/contest/70325#problem/A

题目大意:
给定两个数字串,第一个为待匹配串,第二个为模式串,求模式串第一个在待匹配串中出现的下标,没有则返回-1

分析:
简单修改KMP模板即可应用到数字串匹配上

代码:

#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <algorithm>using namespace std;int a[1000009],b[10009];int n,m,Next[10009];int pos;void cover(){    int i  , j = 0;    Next[0] = Next[1]  = 0;    for (int i = 1; i < m ; i ++)    {        while (j&&b[i]!=b[j]) j = Next[j];        if (b[i]==b[j]) ++j;        Next[i+1] = j;    }    return ;}int kmp(){    int j = 0;    for (int i = 0 ; i < n ; i ++)    {        while (j&&a[i]!=b[j]) j = Next[j];        if (a[i]==b[j]){            if (j==m-1)               return i - j + 1;            ++j;        }    }    return -1;}int main(){    int T;    scanf("%d",&T);    while (T--)    {        scanf("%d%d",&n,&m);        for (int i = 0 ; i < n ; i ++)            scanf("%d",&a[i]);        for (int i = 0 ; i < m ; i ++)            scanf("%d",&b[i]);        cover();        printf("%d\n",kmp());    }}
0 0
原创粉丝点击