hdu 1711 裸KMP

来源:互联网 发布:tbc数据库 编辑:程序博客网 时间:2024/06/05 11:02

题意:基本是裸的KMP了 不解释了,但是有个地方需要注意下,如果不改就一直WA  不知道怎么回事,如果路过的高手知道的话,告诉我哈~

#include<iostream>using namespace std;int next[10010];int T[10010];int S[1000010];int m,n;void get_next(){  int j=0,k=-1;  next[0]=-1;  while(j<m)  {    if(k==-1||T[k]==T[j])    {      next[j+1]=k+1;      j++;k++;    }    else    k=next[k];  }}int kmp(){  int i=0,j=0;  while(i<n&&j<m)//注意  {    //if(j==m) return (i-j+1); 放在这里就WA  不知道怎么回事     if(S[i]==T[j]||j==-1)    {      i++;j++;    }    else    j=next[j];  }  if(j==m) return (i-j+1);//注意  return -1;}int main(){  int N;  scanf("%d",&N);  while(N--)  {    scanf("%d%d",&n,&m);    for(int i=0;i<n;i++)    scanf("%d",&S[i]);    for(int j=0;j<m;j++)    scanf("%d",&T[j]);    get_next();    int flag=kmp();    if(flag!=-1)  printf("%d\n",flag);    else  printf("-1\n");  }}