HDU 1171 Number Sequence

来源:互联网 发布:数据审核专员 编辑:程序博客网 时间:2024/06/05 16:02
1711 Number Sequence题意:KMP模板题,找出短串在长串的匹配到的最近位置KMP这里略了,需要请参考  http://www.cppblog.com/oosky/archive/2006/07/06/9486.html  http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html #include<iostream>using namespace std;int a[1000000 + 10];int next[1000000 + 10];int b[10000 + 10];int n,m;void getnext()//求next数组{int i=1,j=0;next[1]=0;while(i<m){if(j==0||b[i]==b[j]){++i;++j;next[i]=j;}elsej=next[j];}}int kmp()//通过next数组找出最近位置{int i=1,j=1;while(i<=n&&j<=m){if(j==0||a[i]==b[j]){++i;++j;}elsej=next[j];}if(j>m)return i-m;return 0;}int main(){    int T;scanf("%d", &T);while(T--){scanf("%d%d", &n, &m);for(int i = 1; i<=n; i++)scanf("%d", &a[i]);for(int j = 1; j<=m; j++)scanf("%d", &b[j]);getnext();int ans = kmp();if(ans) cout<<ans<<endl;else cout<<-1<<endl;}return 0;}


 

原创粉丝点击