hdu 1711 Number Sequence

来源:互联网 发布:windows安装程序 编辑:程序博客网 时间:2024/06/05 07:53
#include<stdio.h>#include<string.h>int num[1000010],str[10020],next[10020];void get(int m)//m表示匹配的字符串的长度{    int i=0,j=-1;    next[0]=-1;    while(i<m)    {        if(j==-1||str[i]==str[j]) next[++i]=++j;        else j=next[j];    }}int kmp(int n,int m)//n代表被匹配字符串的长度{    int i=0,j=0;    while(i<n&&j<m)    {        if(j==-1||str[j]==num[i]) {++i;++j;}        else j=next[j];    }    if(j==m) return i-m+1;    else return -1;}//kmp算法模板int main(){   int test,i,j,k;   int n,m;   scanf("%d",&test);   while(test--)   {        memset(num,0,sizeof(num));        memset(str,0,sizeof(str));        memset(next,0,sizeof(next));        scanf("%d%d",&n,&m);        for(i=0;i<n;i++)        scanf("%d",&num[i]);        for(i=0;i<m;i++)        scanf("%d",&str[i]);        get(m);        printf("%d\n",kmp(n,m));    }    return 0;}

0 0