hdu1711

来源:互联网 发布:cpu散热测试软件 编辑:程序博客网 时间:2024/06/16 14:13

不知道为什么多了#include <iostream>和using namespace std;就编译错误。。只用c写的语言就能过。无语。。对kmp的理解还不够深入。还需要再练这类题目。

from:

http://blog.csdn.net/ice_crazy/article/details/7975528

#include"stdio.h"#include"string.h"#include"stdlib.h"int n,m;int next[10011];int a[1000111];int b[10011];void getnext(){int j,k;j=0;k=-1;next[0]=-1;while(j<m){if(k==-1 || b[j]==b[k])next[++j]=++k;elsek=next[k];}}int KMP(){int i,j;j=0;for(i=0;i<n;){if(a[i]==b[j]){if(j==m-1)return i-(m-1)+1;i++;j++;}else{j=next[j];if(j==-1){i++;j=0;}}}return -1;}int main(){int T;int i;int ans;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<m;i++)scanf("%d",&b[i]);if(n<m){printf("-1\n");continue;}getnext();ans=KMP();printf("%d\n",ans);}return 0;}


0 0