hdu 1711 Number Sequence(kmp)

来源:互联网 发布:材料 光电 考研 知乎 编辑:程序博客网 时间:2024/05/20 04:13
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int N=1000000+5;const int M=10000+5;int n,m,t[N],p[M],f[M];int kmp(){    int i,j,k=0;    f[0]=0;    f[1]=0;    for(i=1;i<m;i++)    {        j=f[i];        while(j&&p[i]!=p[j]) j=f[j];        f[i+1]=p[i]==p[j]?j+1:0;    }    j=0;    for(i=0; i<n; i++)    {        while(j&&p[j]!=t[i]) j=f[j];        if(p[j]==t[i]) j++;        if(j==m)        {            k=1;            break;        }    }    if(k)        return i-m+2;    else        return -1;}int main(){    int _,i;    scanf("%d",&_);    while(_--)    {        scanf("%d%d",&n,&m);        for(i=0; i<n; i++) scanf("%d",&t[i]);        for(i=0; i<m; i++) scanf("%d",&p[i]);        int p=kmp();        printf("%d\n",p);    }    return 0;}
0 0
原创粉丝点击