HDU 1711:Number Sequence

来源:互联网 发布:js tab选项卡 编辑:程序博客网 时间:2024/05/21 15:06

问题描述

字符串匹配。

解题思路

KMP模板题。

代码

#include<stdio.h>#include<string.h>#define N 1000005int s[N],p[N],next[N];int m,n,t,ans;void getnext(){    int j=0,k=-1;    next[0]=-1;    while(j<m)        if(k==-1||p[j]==p[k])        {            j++;            k++;            next[j]=k;        }        else            k=next[k];}int kmp(){    int i=0,j=0;    getnext();    while(i<n)    {        if(j==-1||s[i]==p[j])        {            i++;            j++;        }        else            j=next[j];        if(j==m)            return i;    }    return -1;}int main(){    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++)            scanf("%d",&s[i]);        for(int i=0;i<m;i++)            scanf("%d",&p[i]);        ans=kmp();        if(ans==-1)            printf("-1\n");        else            printf("%d\n",ans-m+1);    }    return 0;}


原创粉丝点击