hdu1711 Number Sequence(KMP水题)

来源:互联网 发布:天宝erp软件 编辑:程序博客网 时间:2024/06/05 19:47

题意:

在a串中寻找第一个包含b串的的位置

思路:直接KMP即可

#include <cstdio>#define MAXN 1000010using namespace std;void kmp_pre(int x[],int m,int next[]){    int i,j;    j=next[0]=-1;    i=0;    while(i<m){        while(-1!=j&&x[i]!=x[j]) j=next[j];        if(x[++i]==x[++j]) next[i]=next[j];        else            next[i]=j;    }}int next[10010];int kmp(int x[],int m,int y[],int n){    kmp_pre(x,m,next);    int i,j;    i=j=0;    while(i<n){        while(-1!=j&&y[i]!=x[j]) j=next[j];        ++i,++j;        if(j>=m){            return i-m+1;        }    }    return -1;}int y[MAXN];int x[10010];int n,m;int main(){    int t;    scanf("%d",&t);    while(t--){        scanf("%d%d",&n,&m);        for(int i=0;i<n;++i)            scanf("%d",&y[i]);        for(int i=0;i<m;++i)            scanf("%d",&x[i]);        printf("%d\n",kmp(x,m,y,n));    }    return 0;}


0 0
原创粉丝点击