HDU 1711 Number Sequence

来源:互联网 发布:端口监听命令 编辑:程序博客网 时间:2024/05/21 06:27

模板题

题意为:找出b数组在a数组出现的第一个地方,否则输出-1

#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#include<stack>#include<queue>#include<vector>using namespace std;#define LL long long int#define N 1000005#define MAX (1<<31)-1int A[N],B[N];void kmp_pre(int x[],int m,int next[]){    int i=0,j=next[0]=-1;    while(i<m){        if(j==-1||x[i]==x[j]) next[++i]=++j;        else j=next[j];    }}int KMP_Count(int x[],int m,int y[],int n){    int i=0,j=0,next[N],ans=0;    kmp_pre(x,m,next);    while(i<n){        if(j==-1||x[j]==y[i]) i++,j++;        else j=next[j];        if(j>=m) return i-m+1;    }    return -1;}int main(){    int T,n,m;    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++) scanf("%d",&A[i]);        for(int i=0;i<m;i++) scanf("%d",&B[i]);        printf("%d\n",KMP_Count(B,m,A,n));    }    return 0;}

0 0
原创粉丝点击