HDU 1711 裸KMP

来源:互联网 发布:最新网络暴利偏门项目 编辑:程序博客网 时间:2024/05/20 16:14

终于会KMP了... 哇哈哈哈~


#include<iostream>using namespace std;int T,N,M;int next[11111];int s[1111111],t[11111];void setNext(){     int j=1,k=0;     while( j<=M )     {            if( k==0 || t[j]==t[k] )                next[++j]=++k;            else                k=next[k];     }}int getIndex(){    setNext();    int index=0,i=1,j=1;    while( i<=N &&j<=M )    {           if( j==0||s[i]==t[j] )               i++,j++;           else               j=next[j];    }    if( j>M ) return i-M;    else return -1;}int main(){    scanf( "%d",&T );    while( T-- )    {           scanf( "%d%d",&N,&M );           for( int i=1;i<=N;i++ )                scanf( "%d",&s[i] );           for( int i=1;i<=M;i++ )                scanf( "%d",&t[i] );           printf( "%d\n",getIndex() );    }    return 0;}