hdu 1711(KMP)

来源:互联网 发布:隆多生涯数据 编辑:程序博客网 时间:2024/06/05 04:15
#include <stdio.h>#include <string.h>int N,M;int a[1000005],b[10005],next[10005];void getnext(){    int k=1,j=0;    while(k<M)    {        if(j==0||b[j]==b[k])        {            ++j;++k;            if(b[j]==b[k])                next[k]=next[j];            else                next[k]=j;        }        else            j=next[j];    }}int kmp(){    int i=0,j=0;    while(i<=N&&j<=M)    {        if(a[i]==b[j]||j==0)        {++i;++j;}        else            j=next[j];    }    if(j>M)        return i-M;    else        return -1;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&N,&M);        for(int i=1;i<=N;i++)            scanf("%d",&a[i]);        for(int i=1;i<=M;i++)            scanf("%d",&b[i]);        getnext();        printf("%d\n",kmp());;    }}     

原创粉丝点击