hdu 1711 Number Sequence(KMP模板题)

我的第一道KMP。

把两个数列分别当成KMP算法中的模式串和目标串,这道题就变成了一个KMP算法模板题。

 

#include<stdio.h>

#include<string.h>

#define N 1000005

#define M 10005

int a[N],b[M];

int next[M];

int n,m;

void setNext()

{

	int i,j;

	i=0;

	j=-1;

	next[i]=j;

	while(i<m)

	{

		if(j==-1||b[i]==b[j])

		{

			i++;

			j++;

			next[i]=j;

		}

		else

			j=next[j];

	}

	return ;

}

int KMP()

{

	int i,j;

	i=j=0;

	setNext();

	while(i<n)

	{

		if(j==-1||a[i]==b[j])

		{

			i++;

			j++;

			if(j==m)

				return i-m+1;

		}

		else

			j=next[j];

	}

	return -1;

}

int main()

{

	int T;

	scanf("%d",&T);

	while(T--)

	{

		scanf("%d%d",&n,&m);

		int i;

		for(i=0;i<n;i++)

			scanf("%d",&a[i]);

		for(i=0;i<m;i++)

			scanf("%d",&b[i]);

		int temp;

		temp=KMP();

		printf("%d\n",temp);

	}

	return 0;

}


 

 

你可能感兴趣的:(sequence)