hdu 1171 史上最裸KMP
2012-12-29 16:16
211 查看
/* 通俗地讲,next[i]保存了以s[i]为结尾的后缀与模式串前缀的最长匹配数。 */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=10002; const int maxm=1000002; int t,n,m; int a[maxm],b[maxn],next[maxn]; void NEXT() { int i,j=0,key=0; memset(next,0,sizeof(next)); for(i=1;i<n;i++) { j=next[i-1]; while(j&&b[i]!=b[j]) j=next[j-1]; if(b[j]==b[i]) { next[i]=j+1; } else next[i]=0; } return; } int KMP() { int i,j=0,key; for(i=0;i<m;i++) { while(j&&a[i]!=b[j]) j=next[j-1]; if(b[j]==a[i]) { j++; } else j=0; if(j==n)return i-n+2; } return -1; } int main() { cin>>t; while(t--) { cin>>m>>n; int i,j; for(i=0;i<m;i++)scanf("%d",&a[i]); for(i=0;i<n;i++)scanf("%d",&b[i]); NEXT(); cout<<KMP()<<endl; } return 0; }
相关文章推荐
- HDU 1171 Number Sequence KMP 第二道
- HDU - 1171 Number Sequence(Kmp)
- HDU 2087 KMP
- hdu 2594 Simpsons’ Hidden Talents(KMP)
- hdu 3336、4763、2594 kmp next数组的理解、模板题
- hdu-3336(拓展kmp)
- hdu 1711 kmp
- hdu 3336 kmp
- HDU 2203 kmp简单匹配
- HDU 4300 Clairewd’s message(扩展KMP)
- HDU - 2594 Simpsons’ Hidden Talents(KMP)
- HDU 5442 Favorite Donut 最大表示法+KMP
- hdu4300——拓展kmp
- hdu 2087 剪花布条(kmp)
- HDU 1711 Number Sequence (KMP找子串第一次出现的位置)(基础模板题)
- KMP板子题 HDU - 1686
- HDU 1358 Period (kmp求周期)
- KMP——HDU 1686 Oulipo
- HDU 1171 Big Event in HDU
- hdu 1171 Big Event