hdu 1711 kmp匹配

来源:互联网 发布:mac全屏视频卡住 编辑:程序博客网 时间:2024/06/05 08:55

kmp和ac自动机是一样的 只是单模版了  我们可以这题可以试验一下

#include<iostream>#include<cstdio>#include<stdio.h>using namespace std;int f[15555];int s1[1001000],s2[15555];int len1,len2;int main(){    int t;scanf("%d",&t);    while(t--){        scanf("%d%d",&len1,&len2);        for(int i=0;i<len1;++i)scanf("%d",s1+i);        for(int i=0;i<len2;++i)scanf("%d",s2+i);    int i=0,j=-1;    f[0]=-1;    while(i<len2){        if(j==-1||s2[i]==s2[j]){            i++,j++;            f[i]=j;        }        else j=f[j];    }//    for(int i=0;i<=len2;++i)printf("%d ",f[i]);printf("\n");    j=0;//rt    int fl=0;    for(int i=0;i<len1;++i){//        printf("%d %d\n",i,j);        if(j!=-1&&s1[i]!=s2[j])j=f[j];        if(j==-1)j=0;        if(s1[i]==s2[j])++j;        //pd        if(j==len2){            fl=1;            j=i-j+1;            break;        }      }     if(fl)printf("%d\n",j+1);     else printf("-1\n");    }    return 0;}


0 0
原创粉丝点击