HDU - 1711 - Number Sequence (KMP)

来源:互联网 发布:手机淘宝店铺秒杀技巧 编辑:程序博客网 时间:2024/06/14 13:58

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1711

题解:

用普通的kmp踩点过了。。。

AC代码:

#include <iostream>#include <cstring>using namespace std;int nxt[10000];int m , n;int p[10500];int t[1000001];void getnext(){    nxt[0] = -1;    int i = 0, j = -1;    while(i < m)    {        while(j >= 0 && p[i] != p[j])        {            j = nxt[j];        }        j += 1; i+= 1;        if(p[i] == p[j])        {            nxt[i] = nxt[j];        }        else        {            nxt[i] = j;        }    }}int kmp(){    int i = 0, j = 0;    while(i < n)    {        while(j >= 0 && t[i] != p[j])        {            j = nxt[j];        }        i += 1;        j += 1;        if(j == m)        {            j = nxt[m];            return i - m;        }    }    return -1;}int main(){    int tt ;    cin >> tt;    while(tt--)    {        cin >> n >> m;        for(int i = 0; i < n; i++)            cin >> t[i];        for(int j = 0; j < m; j++)            cin >> p[j];        getnext();        int ans = kmp();        if(ans != -1)            cout << ans + 1 <<endl;        else            cout << -1 <<endl;    }    return 0;}
0 0
原创粉丝点击