首页 > 其他 > 详细

hdu 1711 Number Sequence KMP模板题

时间:2016-03-28 15:16:56      阅读:86      评论:0      收藏:0      [点我收藏+]

题意:给你两个数组,求第二个数组在第一个数组中的位置,若不存在,则输出-1.

#include <cstdio>
#include <cmath>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int d[10005];
int f[1000005];
int Next[20005];
void KMP(int s[],int len)
{
    int n=len,i,j;
    memset(Next,0,sizeof(Next));
    for(i=1;i<n;i++)
    {
        j=Next[i-1];
        while(j>0&&s[i]!=s[j]) j=Next[j-1];
        if(s[i]==s[j]) j++;
        Next[i]=j;
    }
    return ;
}
int main()
{
    int i,j,k,m,n,ans,T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
            scanf("%d",&f[i]);
        for(i=0;i<m;i++)
            scanf("%d",&d[i]);
        KMP(d,m);
        ans=-1;
        for(i=0,j=0;i<n;i++)
        {
            while(j>0&&d[j]!=f[i]) j=Next[j-1];
            if(f[i]==d[j]) j++;
            if(j==m)
            {
                ans=i-m+2;
                break;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

hdu 1711 Number Sequence KMP模板题

原文:http://www.cnblogs.com/zuferj115/p/5328695.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!