码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1711-Number Sequence

时间:2016-07-30 19:51:04      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

  字符串匹配模板题。KMP的话,我觉得算导上的讲解与证明很清晰,代码也很工整简洁,很好理解。

技术分享
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e6+5;
const int M = 1e4+5;

int txt[N],pat[M],pf[M];
int n,m;

void CPF()
{
    pf[1] = 0;
    int k = 0;
    for (int i=2;i<=m;i++)
    {
        while (k && pat[k+1]!=pat[i])
            k = pf[k];
        if (pat[k+1] == pat[i])
            k++;
        pf[i] = k;
    }
}

int KMP()
{
    CPF();
    int k = 0;
    for (int i=1;i<=n;i++)
    {
        while (k && pat[k+1]!=txt[i])
            k = pf[k];
        if (pat[k+1] == txt[i])
            k++;
        if (k==m)
            return i-m+1;
    }
    return -1;
}


int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        scanf("%d %d",&n,&m);
        for (int i=1;i<=n;i++)
            scanf("%d",&txt[i]);
        for (int i=1;i<=m;i++)
            scanf("%d",&pat[i]);
        printf("%d\n",KMP());
    }
    return 0;
}
View Code

 

HDU1711-Number Sequence

标签:

原文地址:http://www.cnblogs.com/bdNestInLastation/p/5721575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!