HDU 1711 Number Sequence (Detailed explanation of KMP algorithm)

topic:

Insert picture description here

Code:

#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn = 1000005;
const int maxm = 10005;
    int a[maxn],b[maxm];
int main ()
{
    int line,n1,n2;
    int i,j,flag,p;
    scanf("%d",&line);
    while(line)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        scanf("%d %d",&n1,&n2);
        for (i=0; i<n1; i++)
            scanf(" %d",&a[i]);
        for (i=0; i<n2; i++)
            scanf(" %d",&b[i]);
        for (i=0; i<n1; i++)
        {
            if (a[i]==b[0])
            {
                p=i;
                flag=0;
                for (j=0; j<n2; j++)
                    if (a[i+j]!=b[j])
                    {
                        flag=1;
                        break;
                    }
            }
            if (flag==0)
            {
                break;
            }
        }
        if (flag==0)
            printf("%d\n",p+1);
        else
            printf("-1");
        line--;
    }
    return 0;
}

Explanation:

KMP algorithm analysis: https://www.cnblogs.com/yjiyjige/p/3263858.html

Guess you like

Origin blog.csdn.net/weixin_44918971/article/details/89299770