hdu 1711——Number Sequence

来源:互联网 发布:移动端js框架有哪些 编辑:程序博客网 时间:2024/04/30 01:00

题意:KMP

代码如下:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[1000005];int b[10005];int next[10005];void getnext(int m){        next[0]=0;        next[1]=0;        for(int i=1;i<m;++i)        {                int j=next[i];                while(j&&b[i]!=b[j])j=next[j];                next[i+1]= (b[i]==b[j]?j+1:0);        }}int main(){//freopen("data.txt","r",stdin);        int T;        scanf("%d",&T);        while(T--)        {                int n,m;                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]);                }                getnext(m);                bool f=0;                for(int i=0,j=0;i<n;++i)                {                        if(a[i]==b[j]&&j<m)                        {                                j++;                        }                        else                        {                               while(j>0)                               {                                        j=next[j];                                        if(a[i]==b[j])                                        {                                                j++;                                                break;                                        }                               }                        }                        if(j==m)                        {                                f=1;                                printf("%d\n",i-m+2);break;                        }                }                if(!f)printf("-1\n");        }        return 0;}


0 0