hdu 1711 Number Sequence(KMP)

来源:互联网 发布:普通java项目编译运行 编辑:程序博客网 时间:2024/05/30 07:14
# include <stdio.h># include <string.h># include <algorithm>using namespace std;int n,m,next[10010],a[1000010],b[10010];void Getnext(){    int i=0,j=-1;    next[0]=-1;    while(i<m)    {        if(j==-1||b[i]==b[j])            i++,j++,next[i]=j;        else            j=next[j];    }}int KMP(){    int i=0,j=0;    while(i<n&&j<m)    {        if(j==-1||a[i]==b[j])            i++,j++;        else            j=next[j];    }    if(j==m)        return i-j+1;    return 0;}int  main(){    int t,i;    while(~scanf("%d",&t))    {        while(t--)        {            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]);            Getnext();            int ans=KMP();            if(ans)                printf("%d\n",ans);            else                printf("-1\n");        }    }    return 0;}

2 0
原创粉丝点击