HDOJ1711 Number Sequence(KMP)

来源:互联网 发布:淘宝的子账号怎么设置 编辑:程序博客网 时间:2024/06/05 05:06

HDOJ1711
KMP模板题:

#include<iostream>#include<cstdio>using namespace std;const int maxn=10010;int a[maxn],b[maxn],next[maxn];int cases,m,n;void getNext(){    next[0]=-1; next[1]=0;    int i=1,j=0;    while(i<n){        if(j==-1||b[j]==b[i]){            ++i,++j;            next[i]=j;        }        else j=next[j];    }}int kmp(){    int i=0,j=0;    while(j!=n&&i<m){        if(j==-1||a[i]==b[j]) ++i,j++;        else j=next[j];    }    if(j==n) return i-n+1;    else return -1;}int main(){    int result,i;    cin>>cases;    while(cases--){        cin>>m>>n;        for(i=0;i<m;i++) scanf("%d",a+i);        for(i=0;i<n;i++) scanf("%d",b+i);        getNext();        result=kmp();        cout<<result<<endl;    }    return 0;}
原创粉丝点击